我是否需要在此Sql Server 2012查询中执行PIVOT?

时间:2013-04-09 01:16:21

标签: sql sql-server-2012

我不确定我是否需要做一个PIVOT来将我的数据提取到一个简单的结果集中。如果我这样做,那怎么样?

上下文

每个位置可以存在于0 - 多个县中。 对于每个位置,以相同的结果显示县(例如,逗号分隔)。

示例数据

Locations
Id   Name
-------------
 1   Street1
 2   Street2
 3   County1
 4   County2
 5   Neighbourhood12121
 6   Country4

Counties
LocationId CountyId
---------------------
  1          3
  1          4
  2          3
  5          3

eg.
Street1 exists inside County1 and County2
Street2 exists inside County1
Neighbourhood12121 exists inside County1
The rest do not exist in any counties.

结果

我希望得到以下结果:

Id   Name                Counties
-------------------------------------------------
 1   Street1             County1, County2
 2   Street2             County1
 3   County1             NULL
 4   County2             NULL
 5   Neighbourhood12121  County1
 6   Country4            NULL

这可以用于Sql Server 2012吗?

1 个答案:

答案 0 :(得分:2)

要获得以逗号分隔的列表,我只使用STUFF - FOR XML PATH('')技巧:

SELECT L.Id, L.Name,
    STUFF((SELECT ', ' + CAST(C.CountyId AS varchar(max)) 
           FROM Counties C 
           WHERE C.LocationId = L.Id 
           FOR XML PATH('')), 1, 2, '') AS Counties
FROM Locations L

SQL Fiddle example

注意:您没有提供带有县名的表格,因此我刚刚使用了这些ID。我假设你可以弄清楚其余部分。

如果您想从基于行的数据中获取多列

PIVOT会很有用,但由于您只需要单列,所以我不要不认为它会有用。