ホームページ >データベース >mysql チュートリアル >SQL Server (T-SQL) で列を行に変換する方法
SQL Server で列を行に変換するためのいくつかのメソッド
この記事では、SQL Server テーブルの列データを行データに変換する方法について説明します。テーブル構造が次のようになっていると仮定します:
<code class="language-sql">[ID] [EntityID] [Indicator1] [Indicator2] [Indicator3] ... [Indicator150]</code>
目標は、データを次の構造に変換することです:
<code class="language-sql">[ID] [EntityId] [IndicatorName] [IndicatorValue]</code>
ターゲット結果の例:
<code>1 1 'Indicator1' 'Indicator 1 的值' 2 1 'Indicator2' 'Indicator 2 的值' 3 1 'Indicator3' 'Indicator 3 的值' 4 2 'Indicator1' 'Indicator 1 的值'</code>
解決策:
次のメソッドで列から行への変換を実現できます:
1. UNPIVOT 関数を使用します
UNPIVOT 関数は、列を行に効率的に変換します。
<code class="language-sql">SELECT id, entityId, indicatorname, indicatorvalue FROM yourtable UNPIVOT ( indicatorvalue FOR indicatorname IN (Indicator1, Indicator2, Indicator3) ) unpiv;</code>
変換に関係する列のデータ型が一貫していることを確認してください。
2. CROSS APPLY と UNION ALL を使用します
もう 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>
3. CROSS APPLY と VALUES を使用します (新しいバージョンの SQL Server に適用されます)
新しい 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>
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(''), TYPE).value('.', 'NVARCHAR(MAX)'), 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 のバージョンによって異なります。 列が少ない場合は、最初の 3 つの方法で十分ですが、Indicator
列が多数あるテーブルの場合は、動的 SQL 方法の方が効率的です。 yourtable
を実際のテーブル名に置き換えることを忘れないでください。
以上がSQL Server (T-SQL) で列を行に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。