データを含む2つのテーブルがあります
TAB1
-------------------------
| ID1 | ID2 | A | B |
| 1 | 8 |'John' | 9 |
| 2 | 9 |'Smith'| 0 |
TAB2
------------------------------------------
| NAME | ID1 | ID2 | VSTRING | VINT |ROOT|
| 'C1' | 1 | 8 | 'R01' | NULL | 'A'|
| 'C1' | 1 | 8 | 'R02' | NULL | 'B'|
| 'C2' | 1 | 8 | NULL | 9991 | 'B'|
| 'C1' | 2 | 9 | 'D02' | NULL | 'B'|
生成するクエリが必要です
TAB3
-------------------------------------
| ID1 | ID2 | A | C1 | C2 |
| 1 | 8 | 'John' | 'R01' | 9991 |
| 2 | 9 | 'Smith'| 'D02' | NULL |
TAB1 には、ユーザーと ID が含まれています。TAB2 には、動的構造の列と値が含まれています。1 つのセル ([TAB2.NAME = 'C1' および TAB2.ID1 = 1] を参照) に複数の値がある場合、ROOT = 'A' に関連付けられた値を取得する必要があります。
私が抱えている唯一の問題は、ROOT 列に基づいて正しい値を取得する方法です。次のコードは、TAB3 の正しい構造を返していますが、値が正しくありません。
select t.id1, t.id2, t.a,
max(case when t2.name = 'C2' then t2.vint end) c2,
max(case when t2.name = 'C1' then t2.vstring end) c1
from tab1 t
left join tab2 t2 on t.id1 = t2.id1 and t.id2 = t2.id2
group by t.id1, t.id2, t.a
理想的には、サブクエリなしで単一のクエリを作成したいと考えています。
サブクエリでこれを行うことができましたが、解決策が遅すぎます。上記の例は、結合されたテーブル SQL Server での Pivotのフォロー アップです。(PS: 実際のモデルには、ほぼ 100 の動的列があります)