使用 SQL 将表格数据转换为数据透视表:连接列
在数据库管理中,数据透视表涉及将数据从面向列的格式转换转换为面向行的格式,有效地“翻转”表格。本文讨论了一种场景,您希望将具有多列的表转换为具有原始列的串联值的单列。
假设您有一个包含 ID、TYPE、SUBTYPE、COUNT 和 列的数据集MONTH,排列如下:
ID TYPE SUBTYPE COUNT MONTH 1 A Z 1 7/1/2008 1 A Z 3 7/1/2008 2 B C 2 7/2/2008 1 A Z 3 7/2/2008
目标是将这些数据转换为数据透视表,其中 TYPE 和 SUBTYPE 列是连接成一个新列,并对 ID 和 MONTH 的每个唯一组合的 COUNT 值进行求和。预期输出为:
ID A_Z B_C MONTH 1 4 0 7/1/2008 2 0 2 7/2/2008 1 0 3 7/2/2008
SQL Server PIVOT 解决方案
SQL Server 2005 提供了强大的 PIVOT 和 UNPIVOT 运算符,可以简化数据透视。以下代码示例演示了 PIVOT 技术:
DECLARE @sql AS varchar(max) DECLARE @pivot_list AS varchar(max) DECLARE @select_list AS varchar(max) SELECT @pivot_list = COALESCE(@pivot_list + ', ', '') + '[' + PIVOT_CODE + ']' ,@select_list = COALESCE(@select_list + ', ', '') + 'ISNULL([' + PIVOT_CODE + '], 0) AS [' + PIVOT_CODE + ']' FROM ( SELECT DISTINCT [TYPE] + '_' + SUBTYPE AS PIVOT_CODE FROM stackoverflow_159456 ) AS PIVOT_CODES SET @sql = ' ;WITH p AS ( SELECT ID, [MONTH], [TYPE] + ''_'' + SUBTYPE AS PIVOT_CODE, SUM([COUNT]) AS [COUNT] FROM stackoverflow_159456 GROUP BY ID, [MONTH], [TYPE] + ''_'' + SUBTYPE ) SELECT ID, [MONTH], ' + @select_list + ' FROM p PIVOT ( SUM([COUNT]) FOR PIVOT_CODE IN ( ' + @pivot_list + ' ) ) AS pvt ' EXEC (@sql)
此代码中使用的动态 SQL 技术根据 TYPE 和 SUBTYPE 值的不同组合自动生成 PIVOT 语句,避免了硬编码并使代码免维护。
以上是如何通过连接列和求和值来透视 SQL 中的表格数据?的详细内容。更多信息请关注PHP中文网其他相关文章!