ホームページ > データベース > mysql チュートリアル > 個別のレコードを保持する動的 PIVOT クエリを作成するにはどうすればよいですか?

個別のレコードを保持する動的 PIVOT クエリを作成するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-24 02:15:10
オリジナル
277 人が閲覧しました

How to Create a Dynamic PIVOT Query that Preserves Distinct Records?

個別のレコードを保持するための動的 PIVOT クエリ

問題:

PIVOT クエリでは MAX がよく使用されます() データを要約するための集計。これにより、データが失われる可能性があります。明確な価値観。たとえば、同じ名前のアクティビティ レコードが複数あるテーブルでは、PIVOT は MAX() 値が低いレコードを無視する可能性があります。

目的:

動的な PIVOT を作成する個別のレコードとその対応する割合を保持するクエリ

解決策:

  1. ROW_NUMBER() パーティション化の導入: を実行する前に、名前列によるパーティション化を使用して ROW_NUMBER() を追加します。ピボット。これにより、パーセンテージの順序を維持しながら、一意の行番号が個別の名前の行に割り当てられます。
  2. 分割データのピボット: PIVOT クエリの追加列として ROW_NUMBER() を使用します。出力は、個別の名前の行と、それぞれのアクティビティおよびパーセンテージを照合します。
  3. 動的集計用に再グループ化: ピボット後、データを ID、コード、および ROW_NUMBER() でグループ化します。このステップでは、個別の名前行ごとにパーセンテージ値を結合します。
;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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート