Sql 使用多个分组列的单个结果集

Sql 使用多个分组列的单个结果集,sql,tsql,Sql,Tsql,我正在处理以下数据 Name | Number | Stage Bob | 101 | 1 James | 102 | 2 Chris | 57 | 5 James | 3 | 1 James | 76 | 1 Bob | 95 | 2 Bob | 18 | 2 Bob | 7 | 3 Bob | 11 | 5 Bob | 1 | 4 如果可能的

我正在处理以下数据

 Name  | Number | Stage
 Bob   | 101    |  1
 James | 102    |  2
 Chris | 57     |  5
 James | 3      |  1
 James | 76     |  1
 Bob   | 95     |  2
 Bob   | 18     |  2
 Bob   | 7      |  3
 Bob   | 11     |  5
 Bob   | 1      |  4
如果可能的话,我希望能够将结果输出成类似的格式

Name  | Stage1 | Stage2 | Stage3 | Stage4 | Stage5
Bob   |  1     |  2     | 1      | 1      | 1
Chris |  0     |  0     | 0      | 0      | 5
James |  2     |  1     | 0      | 0      | 0
我知道,我可以使用以下公式,根据名称分组的每个阶段获得计数

select distinct name, count(stage) [Stage1]
from table
where stage = 1
group by name

但我不知道如何将它组合成一个按名称分组的结果集,这可能就是您要寻找的:

SELECT Name
      ,SUM(IIF(Stage=1,1,0)) AS Stage1
      ,SUM(IIF(Stage=2,1,0)) AS Stage2
      ,SUM(IIF(Stage=3,1,0)) AS Stage3
      ,SUM(IIF(Stage=4,1,0)) AS Stage4
      ,SUM(IIF(Stage=5,1,0)) AS Stage5
  FROM mytable
 GROUP BY Name

如果您想要旋转轴,请使用轴:

select 
    [Name],
    isnull([1], 0) Stage1,
    isnull([2], 0) Stage2, 
    isnull([3], 0) Stage3, 
    isnull([4], 0) Stage4, 
    isnull([5], 0) Stage5
from table
pivot (count(Number) for Stage in ([1], [2], [3], [4], [5])) p

为什么Chris为“5”而Bob为“1”?我们正在跟踪1-5级人员的阶段进展。可以使用
UNION
s(根据您的第二次查询选择五个,但缺少的列为
0
),然后是每个阶段列的总和。看起来您需要一个透视表来显示各个阶段的包含/总和。请看一看使用SUM运算符的TSQL Pivot函数。