如何在SQL Server中只有1个查询

Jay*_*les 0 sql-server

我在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)

Tim*_*sen 6

在不知道您的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)