数据透视表和列串联
问题:
如何转换数据库表具有以下结构:
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
进入具有以下结构的表:
ID A_Z B_C MONTH 1 4 0 7/1/2008 2 0 2 7/2/2008 1 0 3 7/2/2008
其中 TYPE 和 SUBTYPE 连接形成新列(例如“A_Z”),并且对 COUNT 进行求和以匹配 ID 和 MONTH 值?
答案:
SQL Server 2005 提供了PIVOT 运算符可实现问题中描述的转换。以下是详细说明:
DECLARE @sql AS varchar(max); 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 ';
此解决方案利用动态 SQL 基于 TYPE 和 SUBTYPE 值的唯一组合构建 PIVOT 查询,提供了一种免维护的方法来处理数据库中的多种类型和子类型。
以上是如何在 SQL Server 中透视表并连接列?的详细内容。更多信息请关注PHP中文网其他相关文章!