繁体   English   中英

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

[英]Apply multiple count conditionally in SQL Server query

我有一个task表,其中包含一些DateTime类型的列,如已完成、待处理、异常。 它加入了user表,我想带来
userName, AllTaskCount, AllPendingTaskCount, AllCompletedTaskCount, AllExceptionTaskCount

如果Completed列的值超过它将被视为已完成的任务,而如果completed的列是 null 并且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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM