SELECT TestName,
SUM(TestFee) AS TestFee ,
COUNT(*) "No of Tests"
FROM ALLPATIENTINFO
WHERE ReqDate BETWEEN '2016-11-04' AND '2016-11-05'
GROUP BY TestName
这里只显示测试名称,总计,以及与日期对应的计数。但我想显示所有保存在数据表中的测试名称。如果测试名称超出此日期,则它仅显示测试名称,测试费用和计数将为零。
最佳答案
这里的一个选择是将 WHERE
子句的逻辑移动到 SELECT
子句中并使用条件聚合:
SELECT TestName,
SUM(CASE WHEN ReqDate BETWEEN '2016-11-04' AND '2016-11-05'
THEN TestFee ELSE 0 END) AS TestFee,
SUM(CASE WHEN ReqDate BETWEEN '2016-11-04' AND '2016-11-05'
THEN 1 ELSE 0 END) AS "No of Tests in Range",
COUNT(*) AS "Total No of Test"
FROM ALLPATIENTINFO
GROUP BY TestName
这将保证出现在原始数据集中的每个测试名称也将出现在结果集中。
关于sql - 我如何根据以下条件编写此 sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40439724/