You can use SQL Server PIVOT
SELECT * FROM ( SELECT P.ProductName , C.CustName , T.Amount FROM Transactions AS T INNER JOIN Product AS P ON T.ProductID = P.ProductID INNER JOIN Customer AS C ON T.CustomerID = C.CustomerID WHERE T.TranDate BETWEEN '2011-01-01' AND '2011-03-31' ) s PIVOT (SUM(Amount) FOR ProductName IN ([Car], [Cycle], [Scooter])) pvt
Test Data
;WITH q AS ( SELECT [Product] = 'Car', [Customer] = 'Armstrong', [Amount] = 80115.50 UNION ALL SELECT 'Car', 'Michelle', 36571.85 UNION ALL SELECT 'Car', 'Schmidt', 45000.65 UNION ALL SELECT 'Cycle', 'Michelle', 15000.00 UNION ALL SELECT 'Cycle', 'Ronald', 25000.00 UNION ALL SELECT 'Scooter', 'Peterson', 82658.23 UNION ALL SELECT 'Scooter', 'Ronald', 98547.52 UNION ALL SELECT 'Scooter', 'Schmidt', 54000.25 ) SELECT Customer , Car = ISNULL(Car, 0) , Cycle = ISNULL(Cycle, 0) , Scooter = ISNULL(Scooter, 0) , Total = ISNULL(Car, 0) + ISNULL(Cycle, 0) + ISNULL(Scooter, 0) FROM ( SELECT * FROM q ) s PIVOT (SUM(Amount) FOR Product IN ([Car], [Cycle], [Scooter])) pvt
Exit
Customer Car Cycle Scooter Total Armstrong 80115.50 0.00 0.00 80115.50 Michelle 36571.85 15000.00 0.00 51571.85 Peterson 0.00 0.00 82658.23 82658.23 Ronald 0.00 25000.00 98547.52 123547.52 Schmidt 45000.65 0.00 54000.25 99000.90
Lieven keersmaekers
source share