SELECT 'Level ' + CAST("Level" AS VARCHAR(2)),
SUM(CASE Month WHEN '01' THEN 1 ELSE 0 END) AS Jan,
SUM(CASE Month WHEN '02' THEN 1 ELSE 0 END) AS Feb,
SUM(CASE Month WHEN '03' THEN 1 ELSE 0 END) AS Mar,
...
FROM myTable
GROUP BY "Level"
SQL 小提琴示例
这基本上是一个穷人的数据透视表,应该适用于大多数 RDBMS。它所做的是使用带有 CASE 的 SUM 来实现每个月的计数。也就是说,对于一月份,如果 = '01',每行的值为 1 Month
,否则为 0。将这些值相加得到表中所有“一月”行的总数。
该GROUP BY Level
子句告诉引擎为 中的每个不同值生成一个结果行Level
,从而按不同级别分隔数据。
由于您使用的是支持 的 SQL Server 2005,因此PIVOT
您可以简单地执行以下操作:
SELECT 'Level ' + CAST("Level" AS VARCHAR(2)),
[01] AS [Jan], [02] AS [Feb], [03] AS [Mar], ...
FROM myTable
PIVOT
(
COUNT(PersonId)
FOR Month IN ([01], [02], [03], ...)
) x
SQL 小提琴示例