SQL Server 的 PIVOT 函数:将行转换为列,处理静态和动态周数
背景:
您有一个包含多个列的临时表,包括商店编号、周数和相应的总计。周数是动态的,这使得将数据透视到表格格式变得具有挑战性。
解决方案:
要在 SQL Server 中使用 PIVOT
函数将行转换为列,请按照以下步骤操作:
1. 静态周数:
如果周数已知,请使用以下硬编码查询:
<code class="language-sql">SELECT * FROM ( SELECT store, week, xCount FROM yt ) src PIVOT ( SUM(xcount) FOR week IN ([1], [2], [3]) ) piv;</code>
2. 动态周数:
如果周数是动态的,请使用动态 SQL:
<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); SELECT @cols = STUFF((SELECT ',' + QUOTENAME(Week) FROM yt GROUP BY Week ORDER BY Week FOR XML PATH(''), TYPE ).VALUE('.', 'NVARCHAR(MAX)') ,1,1,''); SET @query = 'SELECT store,' + @cols + ' FROM ( SELECT store, week, xCount FROM yt ) x PIVOT ( SUM(xCount) FOR week IN (' + @cols + ') ) p '; EXECUTE(@query);</code>
结果:
这两个查询都返回一个透视表,商店编号在左侧,周数在顶部。每个单元格包含对应商店和周数的“xCount”之和。
<code>| STORE | 1 | 2 | 3 | --------------------------- | 101 | 138 | 282 | 220 | | 102 | 96 | 212 | 123 | | 105 | 37 | 78 | 60 | | 109 | 59 | 97 | 87 |</code>
以上是如何使用SQL Server的Pivot函数将行枢轴排入列中,并处理静态和动态周数?的详细内容。更多信息请关注PHP中文网其他相关文章!