ホームページ > データベース > mysql チュートリアル > SQL Server で列を行に効率的に変換するにはどうすればよいですか?

SQL Server で列を行に効率的に変換するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-21 19:32:09
オリジナル
989 人が閲覧しました

How to Efficiently Convert Columns to Rows in 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 サイトの他の関連記事を参照してください。

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