此问题是在 SQL Server 环境中提出的。我在这里找到了一些创建包含多个 GROUP BY 条件的查询的建议,但所有建议都根据第二组条件生成多行。例如,如果 TrendingData 表中的数据集如下所示:
ID SEND HL7 MessageControl STAT DATE CREATED DATE UPDATED
4 AMC1 A03 A03918604B6-4272-40E6-9178-1D711FB135461 P 2015-12-15 12:01:19.153 2015-12-15 12:01:20.137
5 AMC1 A08 A08918604B6-4272-40E6-9178-1D711FB135462 P 2015-12-15 12:01:20.137 2015-12-15 12:01:20.153
6 UHC1R A08 A0893126369-10D1-4506-9A42-B9A7E0AC96151 R 2015-12-15 12:01:34.433 2015-12-15 12:01:34.497
7 UHC1R A03 A03C2468021-8C66-4BAD-A6A7-CBCA02125D411 R 2015-12-15 12:02:38.293 2015-12-15 12:02:38.450
8 UHC1R A08 A08C2468021-8C66-4BAD-A6A7-CBCA02125D412 P 2015-12-15 12:02:38.450 2015-12-15 12:02:38.760
9 UHC1 A08 A0863D0A3D8-402C-4377-9C77-63518A42A11D1 P 2015-12-15 12:02:42.730 2015-12-15 12:02:43.057
然后是查询结果
SELECT
COUNT(*) AS Counts,
STAT,
CONVERT(CHAR(5), DateCreated, 10) AS Date
FROM
TrendingData
GROUP BY
STAT, CONVERT(CHAR(5), DateCreated, 10)
ORDER BY
Date;
返回如下输出(这些数字来自整个表的数据集,而不仅仅是上面的几行):
Counts STAT Date
4488 P 12-15
27568 R 12-15
但我更希望得到如下所示的输出:
Total CodeP CodeR Date
32056 4488 27568 12-15
我相当确定 CodeP
列将由来自 TrendingDate 的 count(*) 的某些变体填充,其中 STAT = 'P'
,但我可以'似乎没有正确的语法让查询在同一日期内提取三个计数。
建议?
最佳答案
您所需要做的就是在 COUNT
聚合函数中为 P
和 R
使用 CASE
语句> 计数,并从 GROUP BY
中删除 STAT
列:
SELECT COUNT(*) AS Total,
COUNT(CASE WHEN stat = 'P' THEN 1 END) AS CodeP,
COUNT(CASE WHEN stat = 'R' THEN 1 END) AS CodeR,
CONVERT(CHAR(5), DateCreated, 10) AS Date
FROM TrendingData
GROUP BY CONVERT(CHAR(5), DateCreated, 10)
ORDER BY Date;
关于SQL 多个 GROUP BY 表示在单行中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34501263/