ホームページ > データベース > mysql チュートリアル > SQL Server で行を列に転置するにはどうすればよいですか?

SQL Server で行を列に転置するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-05 07:39:40
オリジナル
584 人が閲覧しました

How to Transpose Rows into Columns in SQL Server?

SQL Server での行の列への転置

SQL Server では、さまざまな方法で行を列に転置できます。カーソルを利用して行を読み取り、列を設定する以外にも、この変換には別のアプローチが存在します。

効果的な方法の 1 つは、条件付き集計です。 CASE ステートメントで MAX() 関数を利用すると、次のクエリに示すように、タグ ID に基づいて特定の列に値を割り当てることができます。

SELECT TimeSeconds,
       COALESCE(MAX(CASE WHEN TagID = 'A1' THEN Value END), 'n/a') A1,
       COALESCE(MAX(CASE WHEN TagID = 'A2' THEN Value END), 'n/a') A2,
       COALESCE(MAX(CASE WHEN TagID = 'A3' THEN Value END), 'n/a') A3,
       COALESCE(MAX(CASE WHEN TagID = 'A4' THEN Value END), 'n/a') A4
  FROM table1
 GROUP BY TimeSeconds
ログイン後にコピー

または、NULL 値を許可してクエリを簡素化することもできます。 「n/a」の代わりに:

SELECT TimeSeconds,
       MAX(CASE WHEN TagID = 'A1' THEN Value END) A1,
       MAX(CASE WHEN TagID = 'A2' THEN Value END) A2,
       MAX(CASE WHEN TagID = 'A3' THEN Value END) A3,
       MAX(CASE WHEN TagID = 'A4' THEN Value END) A4
  FROM table1
 GROUP BY TimeSeconds
ログイン後にコピー

別の方法には PIVOT 演算子が含まれます。これにより、指定した値に基づいて行を列にローテートできます。

SELECT TimeSeconds, A1, A2, A3, A4
  FROM
(
  SELECT TimeSeconds, TagID, Value
    FROM table1
) s
PIVOT
(
  MAX(Value) FOR TagID IN (A1, A2, A3, A4)
) p
ログイン後にコピー

タグ ID 値が動的である場合、動的 SQL を使用して必要なクエリを生成できます。 STUFF() 関数と FOR XML PATH() 関数を利用すると、列リストを動的に構築し、PIVOT クエリで使用できます。

DECLARE @cols NVARCHAR(MAX), @sql NVARCHAR(MAX)

SET @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(TagID)
            FROM Table1
            ORDER BY 1
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)'),1,1,'')

SET @sql = 'SELECT TimeSeconds, ' + @cols + '
              FROM
            (
              SELECT TimeSeconds, TagID, Value
                FROM table1
            ) s
            PIVOT
            (
              MAX(Value) FOR TagID IN (' + @cols + ')
            ) p'

EXECUTE(@sql)
ログイン後にコピー

これらのメソッドは、SQL で行を列に転置する効率的な方法を提供します。タグ ID 値の可用性と性質に基づいて、さまざまなシナリオに対応するサーバー。

以上がSQL Server で行を列に転置するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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