在 SQL 服务器查询中有条件地应用多个计数

Apply multiple count conditionally in SQL Server query

我有一个 task table,其中包含一些 DateTime 类型的列,例如已完成、未决、异常。它加入 user table 我想带
userName, AllTaskCount, AllPendingTaskCount, AllCompletedTaskCount, AllExceptionTaskCount.

如果 Completed 列有值,则它将被视为已完成的任务,而如果 completed 列为空且 exception 列中有值,则它是 ExceptionTask,如果两者都不是 Completed 列没有值 exception 比它是未决任务。

所以我想在上述给定条件下有条件地应用多次计数。请帮忙...

您可以使用CTEs得到结果。

WITH Result AS(
    SELECT *, COUNT(1) OVER (ORDER BY Id) AS AllTasksCount
     FROM User U
    JOIN TASK T ON U.Id = T.UserId
),PendingTasks AS (
    SELECT [NAme], COUNT(1) AS AllPendingTaskCount FROM Result
    WHERE Completed IS NULL and Exception IS NULL
    GROUP BY [Name]
),CompletedTasks AS (
    SELECT [NAme], COUNT(1) AS AllCompletedTaskCount FROM Result
    WHERE Completed IS NOT NULL and Exception IS NULL
    GROUP BY [Name]
),ExceptionTasks AS (
    SELECT [NAme], COUNT(1) AS AllExecptionTaskCount FROM Result
    WHERE Completed IS NULL and Exception IS NOT NULL
    GROUP BY [Name]
)
SELECT DISTINCT R.[Name]
      ,AllTasksCount
      ,AllPendingTaskCount
      ,AllCompletedTaskCount
      ,AllExecptionTaskCount
FROM Result R
JOIN PendingTasks PT 
  ON PT.[Name] = R.[Name]
JOIN CompletedTasks CT 
  ON CT.[Name] = R.[Name]
JOIN ExceptionTasks ET 
  ON ET.[Name] = R.[Name]

添加了示例架构和数据。请根据您的要求更新它。 SQLFiddle