SQL:是否可以将这两个 SQL 语句合并为一个查询?

SQL: Is it possible to merge these two SQL statements into a single query?

我在 Windows 7 上使用 MS SQL Server 2014。

在数据库中我有一个名为 Orders 的 table,它看起来像这样:

OrderID | CustomerID | OrderDate | ...   
----------------------------------------
1028      90           2015-10-10   
...
2416      68           2016-02-12

我需要两件事:

  1. 客户总数
  2. 今年的客户数量。

我是 SQL 的初学者,但我设法在我的应用程序中编写了 2 个 SQL 似乎可以完成工作的语句:

对于要求 #1

SELECT COUNT(DISTINCT CustomerID) FROM Orders; // result = 74   

对于要求 #2:

SELECT COUNT(DISTINCT CustomerID) FROM Orders WHERE OrderDate >= '2016-01-01'; // result = 34   

我想知道是否有可能 merge/combine 以某种方式 上述 2 SQL 语句到一个查询中...?当然,我需要两个结果:总客户数(上例中为 74 个)和今年的客户数(即 34 个)。

该数据库是一个远程数据库,因此非常欢迎任何加快查询性能的想法:)

使用条件聚合:

SELECT COUNT(DISTINCT CustomerID) as Total,
       COUNT(DISTINCT CASE WHEN OrderDate >= '2016-01-01' THEN CustomerID END) as Total_2016
FROM Orders;

您可以像上一个答案那样水平合并数据,或者您可以使用 UNION 垂直合并它们,如果您认为需要表格形式:

SELECT 'Total Customers' As Description, COUNT(DISTINCT CustomerID) As Number FROM Orders // total = 74   
Union ALL   
SELECT '2016 Customers' AS Description, COUNT(DISTINCT CustomerID) As Number FROM Orders WHERE OrderDate >= '2016-01-01'; // this_year = 34