sql - 在 SQL Server 的 GROUP BY 中使用 Quarter
问题描述
我正在尝试在 Group By 查询中使用 Quarter 内部日期部分,但它对我不起作用。
这是我的查询:
SELECT
Id, Name,
Quarter1 = (SELECT COUNT(TS.Id) FROM TS WHERE TS.Status = STATUS.StatusId GROUP BY DATEPART(QUARTER,TS.EndDate)),
Quarter2 = (SELECT COUNT(TS.Id) FROM TS WHERE TS.Status = STATUS.StatusId GROUP BY DATEPART(QUARTER,TS.EndDate)),
Quarter3 = (SELECT COUNT(TS.Id) FROM TS WHERE TS.Status = STATUS.StatusId GROUP BY DATEPART(QUARTER,TS.EndDate)),
Quarter4 = (SELECT COUNT(TS.Id) FROM TS WHERE TS.Status = STATUS.StatusId GROUP BY DATEPART(QUARTER,TS.EndDate))
FROM
TS
INNER JOIN
STATUS ON TS.Status = STATUS.StatusId
GROUP BY
Id, Name
我需要通过我的数据结果,如示例
Id Name Quarter1 Quarter2 Quarter3 Quarter4
---- ---- -------- -------- -------- --------
1 STATUS1 1 2 3 4
2 STATUS2 4 12 66 80
3 STATUS3 5 10 23 9
4 STATUS4 9 7 90 99
5 STATUS5 20 5 88 22
解决方案
您不需要内部查询 - 只需count
一个条件表达式:
SELECT Id,
Name,
Quarter1 = COUNT(CASE DATEPART(QUARTER, TS.EndDate) WHEN 1 THEN 1 END),
Quarter2 = COUNT(CASE DATEPART(QUARTER, TS.EndDate) WHEN 2 THEN 1 END),
Quarter3 = COUNT(CASE DATEPART(QUARTER, TS.EndDate) WHEN 3 THEN 1 END),
Quarter4 = COUNT(CASE DATEPART(QUARTER, TS.EndDate) WHEN 4 THEN 1 END)
FROM TS
INNER JOIN STATUS ON TS.Status = STATUS.StatusId
GROUP BY Id, Name
推荐阅读
- json - 使用 Dataweave 2.0 转换 JSON 对象
- .net - 使用 Blazor InputFile 标记 - 我如何控制浏览时显示的文件类型
- c# - 使用 GitVersion 进行 AssemblyInfo.cs 更新
- javascript - 从动态添加的组件中调用宿主或父组件的方法的正确方法是什么?
- html - 如何在中心“div”和“a”元素对齐
- ubuntu-18.04 - ROS 节点正在运行但某些连接断开
- javascript - TypeScript 客户端使用
- java - 如何使 KeyListener 起作用?
- c - C 中在 if 条件下带有括号的问题
- c++ - CRAN 是否需要为包中的每个 .R 和 .cpp 函数提供单独的文件?