2017-10-04 76 views
1

我有兩個表選擇兩個表中的一個結果加入

Table A有三列:AID, first name, surname

Tabel B四列:BID, AID, Address, TypeOFAddress

每個人在表A中有每個四行表B.

Table_A 
_AID_|_FIRST_|_LAST_ 
    1 | Leo | White 
    2 | Joe | Black 


Table_B 
_BID_|_AID_|_ADDRESS_|_TYPE_ 
    10 | 1 |Street 1 |STREET 
    11 | 1 |23490878 |ZIPCODE 
    12 | 1 |Town 1 |CITY 
    13 | 1 |Street 2 |STREET 
    14 | 1 |83083099 |ZIPCODE 
    15 | 1 |Town 2 |CITY 

我想在一行中選擇這些行,所以結果輸出是

Result output 
1 |Leo |White |Street 1 |23490878 |Town 
2 |Joe |Black |Street 2 |83083099 |Town 2 

如何以良好的方式做到這一點?

+1

您正在使用哪個數據庫管理系統?這些類型是否固定? – jarlh

+0

現在是AS400,是的類型將被修復。 我編輯了這個問題 – user2018311

+0

如果你使用的是Microsoft SQL Server,你應該查找pivot和unpivot – mko

回答

2

首先,JOIN的表格。然後使用case表達式來完成有條件聚集:

select t1.AID, t1.FIRST, t1.LAST, 
     max(case when t2.TypeOFAddress = 'STREET' then t2.Address end) STREET, 
     max(case when t2.TypeOFAddress = 'ZIPCODE' then t2.Address end) ZIPCODE, 
     max(case when t2.TypeOFAddress = 'CITY' then t2.Address end) CITY 
from table1 t1 
left join table2 t2 on t1.AID = t2.AID_ 
group by t1.AID, t1.FIRST, t1.LAST 
1

你可以,如果你正在使用Microsoft SQL Server

使用 PIVOT
SELECT * FROM 
    (SELECT A.*, B.ADDRESS, B.TYPE 
     FROM Table_A A 
      INNER JOIN Table_B B ON A.AID = B.AID 
    ) SRC 
    PIVOT (MAX([ADDRESS]) FOR TYPE IN ([STREET],[ZIPCODE],[CITY])) PVT