データベースの列を行に変換することは、データ分析と再編成における重要なテクニックです。 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 サイトの他の関連記事を参照してください。