sql – 使用无限量的不同值进行透视
发布时间:2020-12-12 06:29:20 所属栏目:MsSql教程 来源:网络整理
导读:我写了这个查询: SELECT s,[1] AS a1,[2] AS a2,[3] AS a3,[4] AS a4FROM (SELECT grade,aid,s FROM m) pPIVOT(SUM(grade)FOR aid IN ([1],[2],[3],[4])) AS pvt ORDER BY pvt.s; 返回结果: s a1 a2 a3 a41 25 69 95 562 27 99 16 87. . . .99 98 12 34 76
我写了这个查询:
SELECT s,[1] AS a1,[2] AS a2,[3] AS a3,[4] AS a4 FROM (SELECT grade,aid,s FROM m) p PIVOT ( SUM(grade) FOR aid IN ([1],[2],[3],[4]) ) AS pvt ORDER BY pvt.s; 返回结果: s a1 a2 a3 a4 1 25 69 95 56 2 27 99 16 87 . . . . 99 98 12 34 76 这正是我想要的结果.我的问题是“援助”中并不总是有四个不同的值.是否可以重写此查询(或使用存储过程),以便’a *’列的数量取决于’aid’中有多少个不同的值? 解决方法您需要使用动态数据透视表来获取所需的列列表.这将首先检索列列表,然后转动该列表.与此类似的东西:DECLARE @cols AS NVARCHAR(MAX),@query AS NVARCHAR(MAX); select @cols = STUFF((SELECT distinct ',' + QUOTENAME(aid) FROM m FOR XML PATH(''),TYPE ).value('.','NVARCHAR(MAX)'),1,'') set @query = 'SELECT s,' + @cols + ' from ( select grade,s from m ) x pivot ( sum(grade) for aid in (' + @cols + ') ) p ORDER BY p.s' execute(@query) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |