個別のレコードを保持するための動的 PIVOT クエリ
問題:
PIVOT クエリでは MAX がよく使用されます() データを要約するための集計。これにより、データが失われる可能性があります。明確な価値観。たとえば、同じ名前のアクティビティ レコードが複数あるテーブルでは、PIVOT は MAX() 値が低いレコードを無視する可能性があります。
目的:
動的な PIVOT を作成する個別のレコードとその対応する割合を保持するクエリ
解決策:
;with cte as ( select *, ROW_NUMBER() over (partition by name order by percentage desc) ROWNUM from A ), cte2 as ( SELECT Id,Code,ROWNUM,James,James_,Sam,Sam_,Lisa,Lisa_ FROM cte PIVOT(MAX(activity) FOR name IN (James,Sam,Lisa)) AS PVTTable PIVOT ( MAX(percentage) FOR name1 IN (James_,Sam_,Lisa_)) AS PVTTable1 ) select Id, Code, MAX(James) James, MAX(James_) James_, MAX(Sam) Sam, MAX(Sam_) Sam_, MAX(Lisa) Lisa, MAX(Lisa_) Lisa_ from cte2 group by Id, Code, ROWNUM
動的クエリ生成:
動的クエリ生成の場合は、カンマ区切りのリストを置き換えます。名前 (@name_concat、@name1_concat) と SELECT MAX() 集計 (@select_aggs)実行時に設定できる変数を使用します。
結果の例:
クエリは、個別の名前の行とそのパーセンテージを保持して、目的の出力を返します:
Id Code James James_ Sam Sam_ Lisa Lisa_ 1 Prashant Running 43.43 Cooking 1 73 Walking 90.34 1 Prashant Stealing 0.00 Cooking 3.43 NULL NULL 1 Prashant Lacking 0.00 NULL NULL NULL NULL
以上が個別のレコードを保持する動的 PIVOT クエリを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。