ホームページ >データベース >mysql チュートリアル >SQL Server テーブルの列を行に効率的に変換するにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。