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

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

Patricia Arquette
リリース: 2025-01-21 19:27:14
オリジナル
516 人が閲覧しました

How Can I Convert Columns to Rows in SQL Server?

SQL Server での列から行への変換

データベースの列を行に変換することは、データ分析と再編成における重要なテクニックです。 SQL Server でこの変換を実行するにはいくつかの方法があり、それぞれに独自の利点と考慮事項があります。

方法 1: UNPIVOT 関数

UNPIVOT 関数は、列から行への変換をネイティブにサポートしています。 UNPIVOT の構文は次のとおりです:

<code class="language-sql">UNPIVOT (indicatorvalue FOR indicatorname IN (Indicator1, Indicator2, Indicator3, ...)) AS unpiv</code>
ログイン後にコピー

例:

<code class="language-sql">SELECT id, entityId,
  indicatorname,
  indicatorvalue
FROM yourtable
UNPIVOT
(
  indicatorvalue
  FOR indicatorname IN (Indicator1, Indicator2, Indicator3)
) unpiv;</code>
ログイン後にコピー

方法 2: UNION ALL の CROSS APPLY を使用する

UNION ALL を使用した CROSS APPLY は、列を行に変換するもう 1 つの方法です。指定された列に基づいて行を繰り返し結合します:

<code class="language-sql">SELECT id, entityid,
  indicatorname,
  indicatorvalue
FROM yourtable
CROSS APPLY
(
  SELECT 'Indicator1', Indicator1 UNION ALL
  SELECT 'Indicator2', Indicator2 UNION ALL
  SELECT 'Indicator3', Indicator3 UNION ALL
  SELECT 'Indicator4', Indicator4
) c (indicatorname, indicatorvalue);</code>
ログイン後にコピー

方法 3: 値の CROSS APPLY を使用する

このメソッドは、CROSS APPLY の VALUES 句を利用して列名と値を指定します。

<code class="language-sql">SELECT id, entityid,
  indicatorname,
  indicatorvalue
FROM yourtable
CROSS APPLY
(
  VALUES
  ('Indicator1', Indicator1),
  ('Indicator2', Indicator2),
  ('Indicator3', Indicator3),
  ('Indicator4', Indicator4)
) c (indicatorname, indicatorvalue);</code>
ログイン後にコピー

方法 4: 動的 SQL

多数の列をアンワインドする必要があるシナリオでは、動的 SQL でこのプロセスを自動化できます。

<code class="language-sql">DECLARE @colsUnpivot AS NVARCHAR(MAX),
   @query  AS NVARCHAR(MAX)

SELECT @colsUnpivot 
  = STUFF((
      SELECT ',' + QUOTENAME(C.column_name)
      FROM INFORMATION_SCHEMA.COLUMNS AS C
      WHERE C.table_name = 'yourtable' AND
            C.column_name LIKE 'Indicator%'
      FOR XML PATH('')
  ), 1, 1, '')

SET @query 
  = 'SELECT id, entityId,
        indicatorname,
        indicatorvalue
      FROM yourtable
      UNPIVOT
      (
        indicatorvalue
        FOR indicatorname IN (' + @colsUnpivot + ')
      ) u'

EXEC sp_executesql @query;</code>
ログイン後にコピー

特定のシナリオに最適な方法を選択することで、SQL Server で列から行への変換を効率的に実行できます。

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

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