ホームページ >データベース >mysql チュートリアル >SQL Server で列を行に効率的に変換するにはどうすればよいですか?
SQL Server: 列を行に変換
SQL Server では、複数のインジケーター列を含むテーブルを、各インジケーターとそれに対応する値の行の構造に変換する必要がある場合があります。これは、いくつかの手法を通じて実現できます。
UNPIVOT 関数
UNPIVOT 関数は、列を行に変換する簡単な方法です。指定された列を行に変換し、元の列名が「indicatorname」というラベルの付いた新しい行になります。元の列の値は、「indicatorvalue」というラベルの付いた行になります。
<code class="language-sql">SELECT id, entityId, indicatorname, indicatorvalue FROM yourtable UNPIVOT ( indicatorvalue FOR indicatorname IN (Indicator1, Indicator2, Indicator3) ) unpiv;</code>
UNION ALL の CROSS APPLY を使用してください
もう 1 つの方法は、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>
VALUES 句を使用した CROSS APPLY
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 ステートメントを手動で生成するのは面倒な作業になる可能性があります。動的 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 サイトの他の関連記事を参照してください。