加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

带有字符串的SQL Pivot

发布时间:2020-12-12 06:22:55 所属栏目:MsSql教程 来源:网络整理
导读:我在SQL Server中有两个表:Customer和Address 客户表: CustomerID FirstName LastName----------- ---------- ----------1 Andrew Jackson 2 George Washington 地址表: AddressID CustomerID AddressType City----------- ----------- ----------- ------
我在SQL Server中有两个表:Customer和Address

客户表:

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

谢谢

解决方法

它给出了这一行,因为你在子查询“P”的选择列表中有AddressID.因此,即使您在顶层没有AddressID选择此项,PIVOT功能仍然按其分组.您需要将其更改为:
SELECT  CustomerID,Home as HomeCity,Office as OfficeCity 
FROM    (   SELECT C.CustomerID,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而不是客户和地址之间的隐式连接.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读