使用 SQL 连接列和透视数据
问题:
您有一个数据库表示 ID、类型、子类型、计数和月份的列。如何将此数据转换为新格式,其中类型和子类型连接到新列中,并对 ID 和月份的每个唯一组合的计数进行求和?
解决方案:
要实现这种转换后的输出,您可以利用 SQL Server 2005 中的 PIVOT 运算符。PIVOT 运算符允许您将行动态转置为
以下代码片段演示了如何使用 PIVOT 来实现所需的结果:
DECLARE @sql AS varchar(max) DECLARE @pivot_list AS varchar(max) -- Leave NULL for COALESCE technique DECLARE @select_list AS varchar(max) -- Leave NULL for COALESCE technique 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 变量将返回带有连接列和求和计数的所需表。该解决方案可以高效、动态地聚合复杂数据。
以上是如何使用 SQL 连接列、数据透视数据以及唯一 ID 和月份组合的总和计数?的详细内容。更多信息请关注PHP中文网其他相关文章!