[英]SQL Server: joining from multiple tables with unique data
我有3張這樣的桌子。
表1 :
ID ClaimNo Data1
1 1 EC11
2 1 EC12
4 2 EC21
表2 :
ID ClaimNo Data2
1 1 IWC11
3 2 IWC21
4 2 IWC22
5 2 IWC23
表3 :
ID ClaimNo Data3
1 1 DC11
2 1 DC12
3 1 DC13
4 1 DC14
5 1 DC15
我想要這樣的東西:
ClaimNo Data1 Data2 Data3
------------------------------
1 EC11 IWC11 DC11
1 EC12 DC12
1 DC13
1 DC14
1 DC15
2 EC21 IWC21
2 IWC22
2 IWC23
誰能幫我查詢語句。
您似乎想要組織列中的數據。 問題在於該表沒有要連接的鍵。 幸運的是, row_number()
提供了一種解決方案-您可以生成要加入的序列號。
然后,所需的聯接是full outer join
-因為您不知道哪個表將具有最長的列表。 使用coalesce()
有一些額外的邏輯,以確保table3
中的行與前兩個表中的匹配:
select coalesce(t1.claimno, t2.claimno, t3.claimno) as claimno,
t1.data as data1, t2.data as data2, t3.data as data3
from (select t1.*, row_number() over (partition by claimno order by id) as seqnum
from table1 t1
) t1 full outer join
(select t2.*, row_number() over (partition by claimno order by id) as seqnum
from table1 t2
) t2 full outer join
on t2.seqnum = t1.seqnum and t1.claimno = t2.claimno
(select t3.*, row_number() over (partition by claimno order by id) as seqnum
from table1 t3
) t3
on t3.claimno = coalesce(t1.claimno, t2.claimno) and
t3.seqnum = coalesce(t1.seqnum, t2.seqnum)
感謝您的全力支持。 似乎我們沒有直接答案。 我想我可以在下面查詢臨時數據
select T1.ClaimNo, T1.Data1, ROW_NUMBER() OVER(PARTITION BY Data1 ORDER BY Data1) AS Data1Rk, T2.Data2, ROW_NUMBER() OVER(PARTITION BY Data2 ORDER BY Data2) AS Data2Rk, T3.Data3, ROW_NUMBER() OVER(PARTITION BY Data3 ORDER BY Data3) AS Data3Rk from (Table1 T1 left join Table2 T2 on T1.ClaimNo=T2.ClaimNo) left join Table3 T3 on T1.ClaimNo=T3.ClaimNo
這是結果集
ClaimNo Data1 Data1Rk Data2 Data2Rk Data3 Data2Rk 2 EC21 1 IWC21 1 NULL 1 2 EC21 2 IWC22 1 NULL 2 2 EC21 3 IWC23 1 NULL 3 1 EC11 1 IWC11 1 DC11 1 1 EC12 1 IWC11 6 DC11 2 1 EC12 2 IWC11 7 DC12 1 1 EC11 2 IWC11 2 DC12 2 1 EC11 3 IWC11 3 DC13 1 1 EC12 3 IWC11 8 DC13 2 1 EC12 4 IWC11 9 DC14 1 1 EC11 4 IWC11 4 DC14 2 1 EC11 5 IWC11 5 DC15 1 1 EC12 5 IWC11 10 DC15 2
然后我按rk = 1過濾結果,而不是空數據
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.