「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 列をSQL Serverの行に効率的に変換する方法は?

列をSQL Serverの行に効率的に変換する方法は?

2025-04-13に投稿されました
ブラウズ:489

How Can I Efficiently Convert Columns to Rows in SQL Server?

SQL Serverの列変換に関する詳細なガイド

多数のメトリック列を含むテーブルを処理する場合、これらの列を行に変換することは、分析と報告の目的に非常に有益です。この変換では、データを再構築して、異なるスキーマを持つ新しいテーブルを作成します。

問題ステートメント

次のテーブル構造を検討してください:

[ID] [EntityID] [Indicator1] [Indicator2] [Indicator3] ... [Indicator150]

目標は、これらのメトリック列を行に変換することで、次のスキーマを使用して新しいテーブルを作成することです。

[ID] [EntityId] [IndicatorName] [IndicatorValue]

ソリューションを使用している

このタスクを達成するためのエレガントなソリューションは、unpivot関数を活用することです。 Unpivotの構文は次のとおりです。

UNPIVOT ([unpivot column] FOR [pivot column] IN ([pivot values]))
この例では、unpivot列はインジケータ値(たとえば、「indicator1」、「indicator2」など)を表し、ピボット列は列名自体を表します。次のクエリは、unpivotの使用方法を示しています:

select id, entityId,
  indicatorname,
  indicatorvalue
from yourtable
unpivot
(
  indicatorvalue
  for indicatorname in (Indicator1, Indicator2, Indicator3)
) unpiv;
このクエリを実行することにより、メトリック列は行に変換され、メトリック名と値に新しい列が入力されます。

代替

unpivotに加えて、列を行に変換する他の方法があります:

  • Cross Apply All:この方法では、Cross ApplyとUnion Allを使用して、各メトリック名と値を明示的に指定します。
  • Cross apply apply apply force:は上記の方法に似ていますが、値節はCross Applyで使用されます。
  • ダイナミックSQL:多数のインジケータ列がある状況については、動的SQLを使用してクエリステートメントを自動的に生成できます。
ソリューションの選択は、特定のニーズと使用されるSQL Serverのバージョンに依存します。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3