2017-10-04 74 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