如何在SQL Server中编写PIVOT表实现数据透视查询?
SQL Server 使用PIVOT实现状态统计透视表
直接上可以实现需求的SQL语句:
SELECT Owner, ISNULL(Required, 0) AS Required, ISNULL(Pending, 0) AS Pending, ISNULL(Complete, 0) AS Complete FROM ( -- 提取需要的基础数据,只保留Owner和State列 SELECT Owner, State FROM Testing ) AS SourceData PIVOT ( -- 用COUNT统计每个Owner-State组合的记录数 COUNT(State) -- 指定把State字段的三个值转成结果集中的列 FOR State IN (Required, Pending, Complete) ) AS PivotTable ORDER BY Owner;
关键部分解释:
- 子查询SourceData:给PIVOT提供干净的数据源,只包含需要分组和转置的字段,避免无关列干扰结果。
- PIVOT子句:
COUNT(State):每一行对应一个State记录,用COUNT能直接统计出每个Owner对应某个State的记录数量。FOR State IN (Required, Pending, Complete):明确要把State字段的这三个枚举值转换成结果表的列名。
- ISNULL函数:PIVOT对不存在的Owner-State组合会返回NULL,用ISNULL把这些NULL替换成0,完全匹配需求中的显示格式。
如果后续State的可能值会动态新增,可以用动态SQL自动生成列列表,但针对当前固定的三个状态,上面的静态语句足够满足需求。
内容的提问来源于stack exchange,提问作者slashbrackets
相关产品推荐
相关产品推荐

