SQL Serverで行から列への変換を効率的に行うことができます。
SQLサーバーで行を列に変換する効率的な方法を探しています。PIVOTはあまり高速ではないと聞きましたが、大量のレコードを処理する必要があります。
これは私の例です。
-------------------------------
| Id | Value | ColumnName |
-------------------------------
| 1 | John | FirstName |
| 2 | 2.4 | Amount |
| 3 | ZH1E4A | PostalCode |
| 4 | Fork | LastName |
| 5 | 857685 | AccountNumber |
-------------------------------
これが私の結果です。
---------------------------------------------------------------------
| FirstName |Amount| PostalCode | LastName | AccountNumber |
---------------------------------------------------------------------
| John | 2.4 | ZH1E4A | Fork | 857685 |
---------------------------------------------------------------------
どのようにして結果を構築することができますか?
358
2
複数の行のデータを列に変換するには、いくつかの方法があります。
PIVOT
を使うSQL Serverでは、
PIVOT
関数を使ってデータを行から列に変換することができます。デモ]1を参照してください。
未知数の
columnnames
でのピボット転置したい
columnnames
の数が不明な場合は、動的 SQL を使用することができます。デモ]2を参照してください。
集計関数を使う
もし
PIVOT
関数を使いたくないのであれば、CASE
式を使った集約関数を使うことができます。デモ][3]を参照してください。
複数のジョインを使う
これは複数の結合を使用して完了することもできますが、サンプルデータにはない各行を関連付けるための列が必要になります。しかし、基本的な構文は次のようになります。
[3]: https://data.stackexchange.com/stackoverflow/query/497434
データのピボットはまだホットな話題なので、私なりの方法を加えることにしました。これは単なるスクリプトではなく、より多くの可能性を秘めた手法です。まず、配置する必要のあるスクリプトは3つあります。
ColumnActionList
] -> パラメータとしてデータを保持します。proc_PivotPrepare
] -> データを準備します。proc_PivotExecute
] -> スクリプトを実行します。