1

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

的MS SQL Server 2014数据库中我有一个表命名Orders,它看起来像这样:

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 

我想知道是否有可能合并/组合莫名其妙上述2 SQL成一个查询语句...?当然,我需要两个结果:总客户(以上情况为74)以及今年的客户(即34)。

数据库是一个远程数据库,所以任何想法来加速查询性能是非常欢迎的。

+2

你为什么标记MySQL和SQL服务器-CE,如果您的问与答uestion是关于SQL Server 2014的?我已经删除它们。 –

+0

嘿嘿,mysql是'建议标签',sql-server-ce是其他用户添加的。感谢您的编辑。 –

+0

我们有2个答案(目前),见下文。我测试了两者,两者都工作正常。哪一个是**更快**还是他们的速度相同? –

回答

4

使用条件汇总:

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