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