我在SQL Server中创建了3个查询,我只是想知道我是否可以有1个查询而不是这3个查询?
这些是我的3个查询:
SELECT COUNT(JONumber) JANUARY
FROM JobOrders
WHERE JODate BETWEEN '01/01/2017' AND '01/31/2017'
SELECT COUNT(JONumber) FEBRUARY
FROM JobOrders
WHERE JODate BETWEEN '02/01/2017' AND '02/28/2017'
SELECT COUNT(JONumber) TOTAL
FROM JobOrders
WHERE JODate BETWEEN '01/01/2017' AND '02/28/2017'
Run Code Online (Sandbox Code Playgroud)
在不知道您的SQL特定风格的情况下,我可以提供以下单个查询,该查询使用条件聚合来获得相同的结果:
SELECT SUM(CASE WHEN JODate BETWEEN '2017-01-01' AND '2017-01-31'
THEN 1 ELSE 0 END) AS JanCount,
SUM(CASE WHEN JODate BETWEEN '2017-02-01' AND '2017-02-28'
THEN 1 ELSE 0 END) AS FebCount,
COUNT(*) AS TotalCount
FROM JobOrders
Run Code Online (Sandbox Code Playgroud)
由于您使用的是SQL Server,因此更好的方法是GROUP BY使用月份(和年份),并让数据库担心计算记录:
SELECT CAST(MONTH(JODate) AS VARCHAR(2)) + '-' +
CAST(YEAR(JODate) AS VARCHAR(4)) AS MonthYear,
COUNT(*) AS numOrders
FROM JobOrders
WHERE JODate BETWEEN '2017-01-01' AND '2017-02-28'
GROUP BY CAST(MONTH(JODate) AS VARCHAR(2)) + '-' + CAST(YEAR(JODate) AS VARCHAR(4))
WITH ROLLUP
Run Code Online (Sandbox Code Playgroud)