[英]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.