我在Windows 7上使用MS SQL Server 2014.
在数据库中,我有一个名为Orders
的表,如下所示:
OrderID | CustomerID | OrderDate | ...
----------------------------------------
1028 90 2015-10-10
...
2416 68 2016-02-12
我需要两件事:
我是SQL的初学者,但我设法在我的应用程序中编写了两个似乎可以完成这项工作的SQL语句:
对于要求#1
SELECT COUNT(DISTINCT CustomerID) FROM Orders; // result = 74
对于要求#2:
SELECT COUNT(DISTINCT CustomerID) FROM Orders WHERE OrderDate >= '2016-01-01'; // result = 34
我想知道是否可以将以某种方式上述两个SQL语句合并/组合成一个查询...?当然,我需要两个结果:总客户(上述情况为74)以及今年的客户(即34)。
数据库是一个远程数据库,因此非常欢迎任何提高查询性能的想法:)
答案 0 :(得分:4)
使用条件聚合:
SELECT COUNT(DISTINCT CustomerID) as Total,
COUNT(DISTINCT CASE WHEN OrderDate >= '2016-01-01' THEN CustomerID END) as Total_2016
FROM Orders;
答案 1 :(得分:1)
您可以像上一个答案一样水平组合数据,或者如果您认为需要表格形式,可以使用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