sql查询按过滤器计算记录

Laz*_*ale 0 sql t-sql sql-server sql-server-2008-r2

我有这个问题:

 SELECT [ScheduleId]
      ,[EventId]
      ,s.[SkillId]
      ,[ADEmployeeId]
      ,sk.[Description]
  FROM [Schedule] s
  INNER JOIN [Skills] sk
  ON s.SkillId = sk.SkillId
  WHERE EventId = 1
Run Code Online (Sandbox Code Playgroud)

这是输出:

在此输入图像描述

我希望有另一个列可以说明每个描述有多少个可用位置(将计算具有相同描述的行),还有一个列将计算具有相同描述的行数有多少ADEmployeeID.

在图像示例中,另外两列应该包含如下数据:

1 | 1

3 | 1

1 | 0

3 | 1

3 | 1

Gor*_*off 6

你想要窗口功能:

SELECT [ScheduleId],[EventId], s.[SkillId], [ADEmployeeId], sk.[Description],
       COUNT(*) OVER (PARTITION BY sk.Description) as col1,
       COUNT(ADEmployeeId) OVER (PARTITION BY sk.Description) as col2
FROM [Schedule] s INNER JOIN
     [Skills] sk
     ON s.SkillId = sk.SkillId
WHERE EventId = 1;
Run Code Online (Sandbox Code Playgroud)