ホームページ >データベース >mysql チュートリアル >動的 SQL を使用して DB2 で行を列にピボットする方法

動的 SQL を使用して DB2 で行を列にピボットする方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-31 19:35:10798ブラウズ

How to Pivot Rows into Columns in DB2 Using Dynamic SQL?

動的 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。