在 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
我有一个 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