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

動的SQLとカスタム列名を使用してデータを2回ピボットする

    2回ピボットする必要はありません。

    Declare @SQL varchar(max) = '
    Select *
     From (
            Select A.Account
                  ,B.*
             From  (Select Account
                          ,ProductID
                          ,Qty = sum(Qty)
                          ,RN=Row_Number() over (Partition By Account Order by ProductID)
                     From  YourTable
                     Group By Account,Productid
                   ) A
             Cross Apply (values (''qty''+cast(RN as varchar(25)),cast(Qty as varchar(100)))
                                ,(''product''+cast(RN as varchar(25)),cast(productid as varchar(100)))
                         ) B (Item,Value)
    
          ) A
     Pivot (max([Value]) For [Item] in (' + Stuff((Select Distinct ','+QuoteName('product'+ColNr) 
                                                                  +','+QuoteName('qty'+ColNr) 
                                                   From (Select Distinct ColNr=cast(Row_Number() over (Partition By Account,ProductID Order by (Select NULL)) as varchar(25)) From  YourTable ) A  
                                                   Order By 1 
                                                   For XML Path('')),1,1,'')  + ') ) p'
    Exec(@SQL);
    Print @SQL
    

    返品

    視覚化に役立つ場合-サブクエリが生成します




    1. SQL Serverは、スキーマが正しく機能しないユーザー定義のテーブルタイプを作成します

    2. SQL メンテナンス クリーンアップ タスクは機能しているが削除されていない

    3. 行を同時に SELECT と UPDATE する方法はありますか?

    4. mysqlクエリ結果でphpを使用して、親の下にあるすべての子、孫などのノードを取得します