簡體   English   中英

SQL Server:從具有唯一數據的多個表聯接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM