带字符串的 SQL 数据透视表

标签 sql pivot

我在 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 在最终结果中出现了两次。每个客户只能获得一行吗?

我查了这个例子,但没有帮助:http://stackoverflow.com/questions/6267660/sql-query-to-convert-rows-into-columns

谢谢

最佳答案

它给出这一行是因为你有 AddressID在子查询“P”的选择列表中。因此,即使您的顶层中没有 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而不是客户和地址之间的隐式连接。

关于带字符串的 SQL 数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10319562/

相关文章:

sql - Oracle 触发器而不是更新和 ORA-22816 错误

python - 使用 python 和 flask 的多个 SQL 查询

SQL查询从2个表中获取数据

sql - 使用 MySQL 测试存储过程

SQL计算一张表中两个日期之间的天数

python - Pandas:在数据框中从长格式变为宽格式

python - 在 Python 中按列顺序将特定列转换为行并保持其余列相同

excel - 我可以使用 perl 创建数据透视表吗?

node.js - Mongoose Schema ObjectID 的数据透视表

python - 制作pandas数据透视表时如何保持数据框的顺序