ホームページ >データベース >mysql チュートリアル >関連を保持し、ゼロ値を処理しながら、個別のレコードに対して PIVOT クエリを実行するにはどうすればよいですか?
関連付けが保持された個別レコードに対する PIVOT クエリ
個人のアクティビティとパーセンテージを含むデータを含むテーブルがあるシナリオを考えてみましょう。 MAX 関数を使用した標準の PIVOT クエリでは、パーセント値がゼロのアクティビティを見落とす可能性があります。この問題に対処するために、アクティビティとパーセンテージの関係を保持するソリューションを導入します。
これを実現するには、共通テーブル式 (CTE) に ROW_NUMBER() 関数を組み込み、各テーブル内のアクティビティを順番に並べます。名前のグループ。この手法を使用すると、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
CTE (cte) は ROWNUM を追加します。列を最初のテーブルに追加し、各名前のアクティビティをパーセンテージの降順に並べます。この順序により、後続の PIVOT クエリでデータを正しくグループ化して集計できるようになります。
クエリの出力は、期待される結果と似ており、個別のアクティビティがそれぞれの名前とパーセンテージに関連付けられています。
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 結果を取得できます。
以上が関連を保持し、ゼロ値を処理しながら、個別のレコードに対して PIVOT クエリを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。