sql – 使用无限量的不同值进行透视

前端之家收集整理的这篇文章主要介绍了sql – 使用无限量的不同值进行透视前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我写了这个查询
  1. SELECT s,[1] AS a1,[2] AS a2,[3] AS a3,[4] AS a4
  2. FROM (SELECT grade,aid,s FROM m) p
  3. PIVOT
  4. (
  5. SUM(grade)
  6. FOR aid IN ([1],[2],[3],[4])
  7. ) AS pvt ORDER BY pvt.s;

返回结果:

  1. s a1 a2 a3 a4
  2. 1 25 69 95 56
  3. 2 27 99 16 87
  4. . . . .
  5. 99 98 12 34 76

这正是我想要的结果.我的问题是“援助”中并不总是有四个不同的值.是否可以重写此查询(或使用存储过程),以便’a *’列的数量取决于’aid’中有多少个不同的值?

解决方法

您需要使用动态数据透视表来获取所需的列列表.这将首先检索列列表,然后转动该列表.与此类似的东西:
  1. DECLARE @cols AS NVARCHAR(MAX),@query AS NVARCHAR(MAX);
  2.  
  3. select @cols = STUFF((SELECT distinct ',' + QUOTENAME(aid)
  4. FROM m
  5. FOR XML PATH(''),TYPE
  6. ).value('.','NVARCHAR(MAX)'),1,'')
  7.  
  8. set @query = 'SELECT s,' + @cols + ' from
  9. (
  10. select grade,s
  11. from m
  12. ) x
  13. pivot
  14. (
  15. sum(grade)
  16. for aid in (' + @cols + ')
  17. ) p
  18. ORDER BY p.s'
  19.  
  20. execute(@query)

猜你在找的MsSQL相关文章