我在SQL Server中有两个表:客户和地址
客户表 :
CustomerID FirstName LastName ----------- ---------- ---------- 1 Andrew Jackson 2 George Washington
地址表 :
AddressID CustomerID AddressType City ----------- ----------- ----------- ---------- 1 1 Home Waxhaw 2 1 Office Nashville 3 2 Home Philadelphia
这是我需要的输出:
CustomerID Firstname HomeCity OfficeCity ----------- ---------- ---------- ---------- 1 Andrew Waxhaw Nashville 2 George Philadelphia Null
这是我的查询,但没有得到正确的结果:
SELECT CustomerID, Firstname, HOme as HomeCity, Office as OfficeCity FROM (SELECT C.CustomerID, C.FirstName, A.AddressID, A.AddressType, A.City FROM Customer C, Address A WHERE C.CustomerID = A.CustomerID)as P PIVOT (MAX(city) FOR AddressType in ([Home],[Office])) as PVT
这是我得到的结果:
CustomerID Firstname HomeCity OfficeCity ----------- ---------- ---------- ---------- 1 Andrew Waxhaw NULL 1 Andrew NULL Nashville 2 George Philadelphia Null
如您所见,客户1在最终结果中出现了两次。每个客户只能获得一行吗?
谢谢
之所以会显示此行,是因为您AddressID在子查询“ P”的选择列表中。因此,即使您没有顶级的AddressID,也要按此PIVOT功能对它进行分组。您需要将其更改为:
AddressID
PIVOT
SELECT CustomerID, Firstname, Home as HomeCity, Office as OfficeCity FROM ( SELECT C.CustomerID, C.FirstName, A.AddressType, A.City FROM #Customer C, #Address A WHERE C.CustomerID = A.CustomerID ) AS P PIVOT ( MAX(city) FOR AddressType in ([Home],[Office]) ) AS PVT
尽管我倾向于INNER JOIN在客户和地址之间使用显式联接而不是隐式联接。
INNER JOIN