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

SQL Server テーブルの列を行に効率的に変換するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-21 19:17:13330ブラウズ

How to Efficiently Convert SQL Server Table Columns into Rows?

SQL Server テーブルの列を行に変換します

テーブルの列を行に変換することは、非常に便利なデータ処理手法です。この記事では、SQL Server でこのタスクを実行するいくつかの方法について説明します。

UNPIVOT 関数

UNPIVOT 関数は列を行に明示的に変換し、柔軟なデータ再編成を可能にします。たとえば、サンプル テーブル スキーマの 'Indicator1' 列を 'Indicator150' 列に変換するには:

<code class="language-sql">select id, entityId,
  indicatorname,
  indicatorvalue
from yourtable
unpivot
(
  indicatorvalue
  for indicatorname in (Indicator1, Indicator2, Indicator3)
) unpiv;</code>

CROSS APPLY と UNION ALL を使用します

また、CROSS APPLY と UNION ALL を使用して複数のサブクエリを結合することもできます。

<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>

CROSS APPLY 句と VALUES 句を使用する

サポートされているバージョンの SQL Server では、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>

多数の列に対する動的 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 テーブルの列を行に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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