sql >> データベース >  >> RDS >> Sqlserver

SQL Serverで関連テーブルを照会する出力のようなマトリックスを生成するためのSQLクエリ

    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
    

    テストデータ

    ;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
    

    出力

    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
    


    1. すべてのテーブルのすべてのクエリに対するHibernateのコモンクライテリアの制限

    2. Oracleプロシージャの文字列で関数呼び出しを呼び出す

    3. MySQLデータベースに挿入ステートメントの後に列に値を自動割り当てさせることはできますか?

    4. cx_Oracle-DLLのロードに失敗しました:%1は有効なWin32アプリケーションではありません。 Python