sql - Sql 查询,它根据一个表中的分组值返回具有计数的列
问题描述
我有一个任务表。一个 Activity 可能有许多具有不同状态的任务。我需要在主活动视图中添加列,以显示打开任务、关闭任务和总任务的数量。我想我会创建一个视图,其中按活动分组的总数,然后通过 ActivityID 加入。我无法使用正确的数字创建视图,请帮助。这不会返回正确的数字:
等同于“OpenTasks”的状态值为 0,1 和 3。“ClosedTasks”为 3
现有表 - 任务
ID | WorkID| Status
1 | 5 | 2
2 | 5 | 2
3 | 5 | 0
4 | 5 | 3
5 | 6 | 2
6 | 7 | 0
7 | 7 | 0
8 | 9 | 1
9 | 9 | 2
我需要的结果视图是:
WorkID | OpenTasks | ClosedTasks | TotalTasks
5 | 2 | 2 | 4
6 | 0 | 1 | 1
7 | 2 | 0 | 2
9 | 1 | 1 | 2
SELECT top 10000 WorkActivityId,
COUNT(CASE WHEN status = 2 then 1 ELSE NULL END) as "ClosedTasks",
COUNT(CASE WHEN status <> 2 then 1 ELSE NULL END) as "OpenTasks",
COUNT(CASE WHEN status < 10 then 1 ELSE NULL END) as "TotalTasks"
FROM [SDMTWorkActivity].[WorkActivity].[Tasks]
GROUP BY WorkActivityId order by WorkActivityId
我不像 SQL 那样出色,所以感谢任何建议谢谢
解决方案
您的查询应该可以工作,但您可以尝试以下使用sum
SELECT
WorkId,
SUM(CASE WHEN status <> 2 then 1 ELSE 0 END) as "OpenTasks",
SUM(CASE WHEN status = 2 then 1 ELSE 0 END) as "ClosedTasks",
SUM(CASE WHEN status < 10 then 1 ELSE 0 END) as "TotalTasks"
FROM [SDMTWorkActivity].[WorkActivity].[Tasks]
GROUP BY WorkId
order by WorkId
输出:
| WorkId | OpenTasks | ClosedTasks | TotalTasks |
| ------ | --------- | ----------- | ---------- |
| 5 | 2 | 2 | 4 |
| 6 | 0 | 1 | 1 |
| 7 | 2 | 0 | 2 |
| 9 | 1 | 1 | 2 |
推荐阅读
- postgresql - PostgreSQL JDBC 驱动程序从日志记录中隐藏准备好的语句参数
- azure - 使用默认 Databricks 文件系统或默认 DBFS 或 DBFS 根的哪种数据加密?
- javascript - 无法将文件对象从 reactjs 发送到 nodejs
- node.js - 在 node.js 中使用来自控制器的 fastify-redis
- oracle - 在 Oracle 12c 中创建具有分区年和子分区月的表
- android - 最适合创建闹钟应用程序的语言/框架?
- swift - 在切换到 UITabbarController 中的不同选项卡之前关闭当前选项卡上的推送视图控制器
- sap-cloud-platform - 错误 - 无法为本地连接添加“SAP-Connectivity-Authentication”标头
- maven - maven传递依赖错误版本
- javascript - 使用来自多个 Fetch API 请求的变量