フィールドのコレクションを1つの列に含むテーブルがあります。次のように、それ自身の行の各フィールドの適切なビューに構築しようとしています例:T-SQLループ内の複数の自己結合
T_data:
+------+---------+---------+
| ID | Field | Value |
+------+---------+---------+
| 1 | Name | John |
| 1 | Age | 41 |
| 1 | Height | 181 |
| 2 | Name | Kelly |
| 2 | Age | 42 |
| 2 | Height | 165 |
| 3 | Name | Dan |
| 3 | Age | 43 |
| 3 | Height | 169 |
+------+---------+---------+
T_result:
+--------+--------+--------+--------+
| Name | John | Kelly | Dan |
| Age | 41 | 42 | 43 |
| Height | 181 | 165 | 169 |
+--------+--------+--------+--------+
私は3自己との例でこれを行う方法を知っているが、同じテーブルに合流するが、これは単なる簡略化した例である、私のデータは、IDとフィールドの未知数を持っています - 私は何とかそれらをループし、動的なテーブルにそれらを結合する必要があります。 私の結果に到達するにはどうすればいいですか?
これは一種-の私は心の中で持っているもの(動作しない)である:
with #T_id as (
select distinct ID, row_number() over (order by ID asc) as rn form T_data)
-- here's where I need to loop through the IDs
-- Pseudo-code ... I know the following doesn't work
while @i <= (select count(*) from #T_id)
begin
select T_data.Field, T_data.Value from T_data
left join T_result on T_data.Field = T_result.Field
where T_data.ID = (select ID from #T_id where rn = @i)
end
編集:最終的な結果は、Reports Serverのが使用するストアドプロシージャのためのものです。
すべてのヘルプは理解されるであろう:)
グーグルのSQL Serverの動的ピボット "。それはあなたを始めるはずです。 – dfundako
テーブルから属性を無制限に読み込むためにSQLを生成しようとしているようですが、このSQLを生成するためにSQLを使用しますか(SQLでSQLを生成してからSQLを実行できますか?プログラミング言語のSQLコマンド?別のアプローチは、データを読み込んで一時テーブルに挿入し、最後に一時テーブルを照会するループまたはカーソルを作成することです。または、PIVOTテーブルを探していますか?これを行うことができれば最高に見えるでしょう – Cato