sql - SQL 将列转置为行
问题描述
我一直在尝试转置这个;
**ProjectNum PillarID BusinessPillar**
95329 29 Pillar29
95329 1 Pillar1
95354 1 Pillar1
95354 4 Pillar4
95354 7 Pillar7
进入这个;
**ProjectNum Pillars**
95329 Pillar1, Pillar29
95354 Pillar1, Pillar4, Pillar7
我已经研究过使用 pivot/unpivot 并且已经做到了这一点
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(PillarID)
from dbo.MyTable
group by BusinessPillar, PillarID
order by PillarID
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = N'SELECT ProjectNum, ' + @cols + N' from
(
select ProjectNum, PillarID, BusinessPillar
from dbo.MyTable
) x
pivot
(
max(BusinessPillar)
for PillarID in (' + @cols + N')
) p '
exec sp_executesql @query;
但是,我在弄清楚如何将所有透视结果组合成一个逗号分隔的列时遇到了很多麻烦,就像我想要的示例中一样。
任何帮助或方向表示赞赏。
解决方案
您可以使用以下查询来获得所需的结果:
SELECT ProjectNum, STUFF(
(SELECT DISTINCT ', ' + BusinessPillar
FROM Test
WHERE ProjectNum = t.ProjectNum
FOR XML PATH (''))
, 1, 1, '') AS Pillars
FROM Test as t
GROUP BY ProjectNum
这是 SQL Fiddle 链接: SQL Fiddle
推荐阅读
- git - 能不能用命令行方式接受合并代码和HEAD冲突代码
- javascript - ImageInput only works the second time [3.0.0-alpha only]
- javascript - 图库灯箱仅在 IE11 中首次单击时不插入图像
- ios - How to determine if issue crash from Crashlytics list is classified as OOM
- javascript - 如何修复:组件 ClassOverallPerComponent 不是任何 NgModule 的一部分
- css - 如何以 Bulma 方式垂直和水平居中一些内容?
- reactjs - 为什么我需要在 MobX 中使用 Context 或 Provider?
- selenium - 如何为
标签中包含的文本编写 xpath? - qt - 如何静态构建qtcharts?
- arrays - 如何通过间隔列表中的索引号访问元素?