ホームページ > データベース > mysql チュートリアル > SQL Server (T-SQL) で列を行に変換する方法

SQL Server (T-SQL) で列を行に変換する方法

Linda Hamilton
リリース: 2025-01-21 19:22:10
オリジナル
548 人が閲覧しました

How to Convert Columns to Rows in SQL Server (T-SQL)?

SQL Server で列を行に変換するためのいくつかのメソッド

この記事では、SQL Server テーブルの列データを行データに変換する方法について説明します。テーブル構造が次のようになっていると仮定します:

[ID] [EntityID] [Indicator1] [Indicator2] [Indicator3] ... [Indicator150]
ログイン後にコピー

目標は、データを次の構造に変換することです:

[ID] [EntityId] [IndicatorName] [IndicatorValue]
ログイン後にコピー

ターゲット結果の例:

<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 関数は、列を行に効率的に変換します。

SELECT id, entityId, indicatorname, indicatorvalue
FROM yourtable
UNPIVOT
(
  indicatorvalue
  FOR indicatorname IN (Indicator1, Indicator2, Indicator3)
) unpiv;
ログイン後にコピー

変換に関係する列のデータ型が一貫していることを確認してください。

2. CROSS APPLY と UNION ALL を使用します

もう 1 つの方法は、CROSS APPLY と UNION ALL を使用することです:

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);
ログイン後にコピー

3. CROSS APPLY と VALUES を使用します (新しいバージョンの SQL Server に適用されます)

新しい SQL Server バージョンでは、CROSS APPLY 句と VALUES 句を使用できます。

SELECT id, entityid, indicatorname, indicatorvalue
FROM yourtable
CROSS APPLY
(
  VALUES
  ('Indicator1', Indicator1),
  ('Indicator2', Indicator2),
  ('Indicator3', Indicator3),
  ('Indicator4', Indicator4)
) c (indicatorname, indicatorvalue);
ログイン後にコピー

4. 動的 SQL を使用する (多数のインジケーター列に適しています)

多数のインジケータ列を含む大きなテーブルの場合、動的 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;
ログイン後にコピー

どの方法を選択するかは、テーブルのサイズと SQL Server のバージョンによって異なります。 列が少ない場合は、最初の 3 つの方法で十分ですが、Indicator 列が多数あるテーブルの場合は、動的 SQL 方法の方が効率的です。 yourtable を実際のテーブル名に置き換えることを忘れないでください。

以上がSQL Server (T-SQL) で列を行に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート