combining multiple rows with arbitrary number of columns
well it looks like I will use stuff xml again and parse out in application. however if any one knows any clever rearrangement of this query using cte's and cross or outer applys I would love to hear it. 

        select distinct tv.Item,
       --tv.ItemDescription,
       tv.PackQty,
       TotalUsage = (
                        SELECT sum(tvss.Qty * -1)
                        FROM transactions_VIEW as tvss
                        WHERE tvss.Item = tv.Item
                          AND TranDateTime between '2019-04-01 00:00:00.000' and '2019-04-30 11:59:59.000'
                          AND tvss.Supplier IN ('###', '###', '###')
                          AND tvss.TranType IN ('I','B')
                    ),
       [jobDesc:use] = STUFF((SELECT ';' + CAST(tvs.JobDescription as nvarchar(max)) +':'+CAST(count(*) as nvarchar(max))
                          from transactions_VIEW as tvs
                                   join Job as js on tvs.JobNumber = js.MyNo
                          WHERE js.Active = 1
                            AND TranDateTime between '2019-04-01 00:00:00.000' and '2019-04-30 11:59:59.000'
                            AND tvs.Supplier IN ('###', '###','###')
                            AND tvs.TranType IN ('I', 'B')
                            AND tvs.Item = tv.Item
                          Group By tvs.JobDescription FOR XML Path ('')), 1, 1, '')
from transactions_VIEW as tv
         join Job as j on tv.JobNumber = j.MyNo
WHERE j.Active = 1
  AND TranDateTime between '2019-04-01 00:00:00.000' and '2019-04-30 11:59:59.000'
  AND tv.Supplier IN ('###', '###','###')
  AND tv.TranType IN ('I', 'B')
group by tv.Item, tv.JobDescription, tv.ItemDescription, Qty, PackQty