簡體   English   中英

我可以使用SQL將另一張表中的多行值組合為一行的多列嗎?

[英]Can I combine values from multiple rows in another table into multiple columns of one row using SQL?

我有兩個表:T1:

| M_ID | P_ID1 | P_ID2 | rest of T1 columns |
|  0   |   0   |   1   |         ...        |
|  1   |   2   |   3   |         ...        |

T2:

| P_ID | Type | A | B |
|  0   |   1  | a | e |
|  1   |   2  | b | f |
|  2   |   1  | c | g |
|  3   |   2  | d | h |

現在,我要查詢選擇此內容:

| M_ID | P_1a | P_1b | P_2a | P_2b | rest of T1 columns |
|  0   |  a   |  e   |  b   |  f   |         ...        |
|  1   |  c   |  g   |  c   |  h   |         ...        |

因此,換句話說:我想從T1中選擇所有列,但我想用T2中的列替換P_ID1,其中P_ID等於P_ID1,類型為1,並且對於P_ID2基本相同。

我顯然可以通過多個查詢獲得所需的信息,但我想知道是否有一種方法可以通過一個查詢來完成此操作。 有任何想法嗎?

我目前正在使用SQL Server 2008r2,但我也對其他數據庫軟件的解決方案感興趣。

謝謝您的幫助!

當然,您只需要使用聯接:

select T1.M_ID, t2_1.A as P_1a, t2_1.B as P_1b, t2_2.A as P_2a, t2_2.B as P_2b, ...
from T1, T2 t2_1, T2 t2_2
where T1.P_ID1 = t2_1.P_ID and T1.P_ID2 = t2_2.P_ID 

基本上我們將T1連接到T2兩次,一次用於P_1值,第二次用於P_2值。 您需要在兩次連接T2時使用別名T2來區分兩者(這就是t2_1和t2_2的意思-用來區分所連接的T2的兩個實例)。

這僅使用現代聯接語法與@John Pickup的解決方案相同:

select T1.M_ID, t2_1.A as P_1a, t2_1.B as P_1b, t2_2.A as P_2a, t2_2.B as P_2b, ...
from T1
     join T2 t2_1 on T1.P_ID1 = t2_1.P_ID 
     join T2 t2_2 on T1.P_ID2 = t2_2.P_ID 

我只發布一個單獨的答案, 因為您在此處得到的注釋中沒有代碼格式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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