ホームページ >データベース >mysql チュートリアル >動的 SQL を使用して DB2 で行を列にピボットする方法
動的 SQL を使用した DB2 の行の列への転置
目的は、テーブル内のデータをピボットし、行を列に変換し、希望の出力。次のテーブル構造について考えてみましょう。
ソース テーブル
ItemID | Item | Value |
---|---|---|
1 | Meeting | Now |
1 | Advise | Yes |
1 | NoAdvise | No |
2 | Meeting | Never |
2 | Advise | No |
2 | NoAdvise | Null |
2 | Combine | Yes |
必要な出力
ItemID | Meeting | Advise | NoAdvise |
---|---|---|---|
1 | Now | Yes | No |
2 | Never | No | Null |
SQL相関を使用したクエリサブクエリ
この変換を実現する 1 つのアプローチは、相関サブクエリを使用することです。
SELECT A.ItemID, MAX(CASE WHEN A.Item = 'Meeting' THEN Value END) AS Meeting, MAX(CASE WHEN A.Item = 'Advise' THEN Value END) AS Advise, MAX(CASE WHEN A.Item = 'NoAdvise' THEN Value END) AS NoAdvise FROM A GROUP BY A.ItemID
このクエリは、複数の相関サブクエリを、目的の出力列ごとに 1 つずつ実行して、対応する値を抽出します。行ごとに。次に、結果が ItemID 列によってグループ化され、ピボットされた出力が取得されます。
動的 SQL を使用した代替アプローチ
別のオプションは、動的 SQL を利用してピボット テーブルを構築することです。 。このアプローチにより柔軟性が向上し、目的の出力列を生成するようにカスタマイズできます。
DECLARE @cols AS NVARCHAR(MAX), @sql AS NVARCHAR(MAX) SET @cols = '' SELECT @cols += ',MAX(CASE WHEN Item = ''' + Item + ''' THEN Value END) AS ' + Item FROM ( SELECT DISTINCT Item FROM A ) AS Items SET @sql = 'SELECT ItemID, ' + SUBSTRING(@cols, 2) + ' FROM A GROUP BY ItemID' EXEC (@sql)
このクエリは、Item 列の個別の値に基づいて SQL ステートメントを動的に構築し、それを実行して、ピボットされた出力を生成します。 .
以上が動的 SQL を使用して DB2 で行を列にピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。