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