SQL Server 中的数据透视表提供了一种强大的方法,可以将数据从行转置为列。但是,用户在构建正确的查询时可能会遇到挑战。
针对已知列值使用 PIVOT 函数:
对于预定义的列值(在本例中为周数),可以直接使用 PIVOT 函数:
<code class="language-sql">select * from ( select store, week, xCount from yt ) src pivot ( sum(xcount) for week in ([1], [2], [3]) ) piv;</code>
动态生成透视列值:
为了处理未知的列值(例如动态的周数),可以使用动态 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>
结果:
两种方法都产生相同的结果:
| 101 | 138 | 282 | 220 |
| 102 | 96 | 212 | 123 |
| 105 | 37 | 78 | 60 |
| 109 | 59 | 97 | 87 |
以上是如何使用枢轴函数将行转换为SQL Server中的列?的详细内容。更多信息请关注PHP中文网其他相关文章!