如何进行SQL透视,将所有结果放在每条记录的一行中?

如何进行SQL透视,将所有结果放在每条记录的一行中?,sql,pivot,Sql,Pivot,例如,我有一个表,其中一列是客户列表(仅是他们的ID),另一列是他们喜欢的艺术家列表 12345 Creed 12345 Evanescence 12345 Linkin Park 22556 Creed 22556 Foo Fighters 33485 Foo Fighters 我已经使用动态列标题创建了一个Pivot(针对艺术家),因为虽然有一个供他们选择的集合列表,但这可能会发生变化,我不想每次发生变化时都要不断更新代码(我想要像我们其他人一样轻松的生活!) 我希望Pivot显示的是每个

例如,我有一个表,其中一列是客户列表(仅是他们的ID),另一列是他们喜欢的艺术家列表

12345 Creed
12345 Evanescence
12345 Linkin Park
22556 Creed
22556 Foo Fighters
33485 Foo Fighters
我已经使用动态列标题创建了一个Pivot(针对艺术家),因为虽然有一个供他们选择的集合列表,但这可能会发生变化,我不想每次发生变化时都要不断更新代码(我想要像我们其他人一样轻松的生活!)

我希望Pivot显示的是每个客户一行,以显示他们喜欢的艺术家

但是,当我运行下面的PIVOT时,对于列出了多个艺术家的客户,结果返回每个客户超过1行,如下所示:

CustomerID  Creed  Evanescence  Foo Fighters  Linkin Park
12345       Creed
12345              Evanescence
12345                                         Linkin Park
22556       Creed
22556                           Foo Fighters
33485                           Foo Fighters
我想要的是:

CustomerID  Creed  Evanescence  Foo Fighters  Linkin Park
12345       Creed  Evanescence                Linkin Park
22556       Creed               Foo Fighters
33485                           Foo Fighters
T-SQL


外部查询中不需要
SELECT DISTINCT

当基础表具有其他列时,会发生此问题。您没有提到任何内容,但请尝试以下内容:

SET @DynamicPivotQuery = N'
SELECT CustomerID, ' + @ColumnName + '
FROM (SELECT DISTINCT CustomerID, Artist
      FROM ##TEMP_CustomerWithArtists cwa
     ) cwa
PIVOT(MAX(Artist) 
      FOR [Artist] IN (' + @ColumnName + ')
     ) AS PVTTable';

这种行为是我不喜欢
PIVOT
语法的原因之一。

外部查询中不需要
SELECT DISTINCT

当基础表具有其他列时,会发生此问题。您没有提到任何内容,但请尝试以下内容:

SET @DynamicPivotQuery = N'
SELECT CustomerID, ' + @ColumnName + '
FROM (SELECT DISTINCT CustomerID, Artist
      FROM ##TEMP_CustomerWithArtists cwa
     ) cwa
PIVOT(MAX(Artist) 
      FOR [Artist] IN (' + @ColumnName + ')
     ) AS PVTTable';

这种行为是我不喜欢
PIVOT
语法的原因之一。

通过您的查询,我得到了与您提到的相同的预期结果?我假设它是Sql server。。您的查询似乎按预期工作。我正在使用SQL Server 2014 Management Studio,是的,当我在表中只有这两列时,查询工作正常-抱歉,我应该包括表中存在的所有列,因为这些列是导致问题的原因。通过您的查询,我得到了与您提到的相同的预期结果?我假设它是Sql server。。您的查询似乎按预期工作。我正在使用SQL Server 2014 Management Studio,是的,当我在表中只有这两列时,查询工作正常-抱歉,我应该包括表中存在的所有列,因为这些列导致了问题。您是对的,我应该包括表中存在的所有列。道歉。您的解决方案已经起作用了,我可以从表中指定透视所需的2列。感谢您确切地知道我遗漏了什么,并提供了解决方案。您是对的,我应该包括表中存在的所有列。道歉。您的解决方案已经起作用了,我可以从表中指定透视所需的2列。感谢您确切地知道我遗漏了什么,并提供了解决方案。