使用SQL Server的PIVOT函数重组数据
SQL Server 强大的PIVOT
函数提供了一种将数据从基于行的结构转换为基于列的结构的简化方法。这对于创建更易于阅读和分析的表格报告特别有用。
想象一个包含商店编号、周数和值的表(我们称之为 xCount
)。 目标是重新组织这些数据,以便商店编号垂直列出(行),周编号水平列出(列)。
静态 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>
此查询对每个商店和每周的 xCount
值进行求和。 IN
子句指定周(本例中为 [1]、[2]、[3])。
动态 PIVOT(未知周数):
当周数是动态的(事先未知)时,需要更灵活的方法:
<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>
此动态查询首先从 yt
表构建一个以逗号分隔的唯一周数列表。 然后将该列表合并到一个更大的查询中,该查询使用 PIVOT
函数创建所需的基于列的输出。结果是一个数据透视表,将商店显示为行,周显示为列,并具有相应的 xCount
值。 此方法适用于数据中存在的任意周数。
以上是如何使用枢轴将行转换为SQL Server中的列?的详细内容。更多信息请关注PHP中文网其他相关文章!