SQL Query for generating matrix like output querying related table in SQL Server

后端 未结 3 1792
臣服心动
臣服心动 2020-12-29 13:22

I have three tables:
Product

ProductID   ProductName  
1           Cycle  
2           Scooter  
3           Car  

<

3条回答
  •  遥遥无期
    2020-12-29 14:12

    You can use SQL Server's PIVOT operator

    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
    

    Output

    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
    

提交回复
热议问题