Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择2个不同要求的值_Sql_Sql Server_Sql Server 2014 - Fatal编程技术网

Sql 选择2个不同要求的值

Sql 选择2个不同要求的值,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,我想知道是否可以在一个select语句中选择两个具有不同条件的值。我知道我可以通过子查询实现上述功能,只是想知道是否有更有效的方法来实现 考虑下表: UserId | CreatedDate 1 | 2018-01-21 2 | 2018-02-21 3 | 2018-03-21 4 | 2018-11-21 5 | 2018-11-21 我希望选择用户总数以及本月加入的用户总数。我可以通过以下两个查询来完成: SELECT COUNT(*)

我想知道是否可以在一个select语句中选择两个具有不同条件的值。我知道我可以通过子查询实现上述功能,只是想知道是否有更有效的方法来实现

考虑下表:

UserId | CreatedDate
1      | 2018-01-21
2      | 2018-02-21
3      | 2018-03-21
4      | 2018-11-21
5      | 2018-11-21
我希望选择用户总数以及本月加入的用户总数。我可以通过以下两个查询来完成:

SELECT COUNT(*) 
FROM [Users]

SELECT COUNT(*) 
FROM [Users] 
WHERE MONTH(CreatedDate) = MONTH(GETDATE()) AND YEAR(CreatedDate) = YEAR(GETDATE())
然而,与两个查询相反,这是一个单选查询吗


编辑:为了消除混淆,我要查找两列,而不是两行。

使用条件聚合:

SELECT COUNT(*),
       SUM(CASE WHEN MONTH(CreatedDate) = MONTH(GETDATE()) AND YEAR(CreatedDate) = YEAR(GETDATE()) THEN 1 ELSE 0 END)
FROM [Users];

注意:
MONTH[CreatedDate]
没有意义,所以我用括号替换了方括号。

使用条件聚合:

SELECT COUNT(*),
       SUM(CASE WHEN MONTH(CreatedDate) = MONTH(GETDATE()) AND YEAR(CreatedDate) = YEAR(GETDATE()) THEN 1 ELSE 0 END)
FROM [Users];

注意:
MONTH[CreatedDate]
没有意义,所以我用括号替换了方括号。

我相信这会满足您的要求:

SELECT COUNT(*), 
SUM(CASE WHEN MONTH[CreatedDate] = MONTH(GETDATE()) AND YEAR(CreatedDate) = YEAR(GETDATE()) THEN 1 ELSE 0 END) as SubCountWithCriteria
FROM [Users] 

我相信这会满足您的需求:

SELECT COUNT(*), 
SUM(CASE WHEN MONTH[CreatedDate] = MONTH(GETDATE()) AND YEAR(CreatedDate) = YEAR(GETDATE()) THEN 1 ELSE 0 END) as SubCountWithCriteria
FROM [Users] 
这里有一条路

(如果需要两列,这将提供两行,其他人已使用CASE显示了该解决方案)

这里有一条路

(如果需要两列,这将提供两行,其他人已使用CASE显示了该解决方案)


因为OP想要两行而不是两列?除此之外,我不知道这是不公平的@gordonlinoff也许是因为有人打败了你?我不知道为什么,这对我来说似乎是个好答案。@Hogan。不仅两列对我来说更有意义,而且OP已经澄清:“编辑:为了消除混淆,我要找两列,而不是两行。”@Bojan和谁击败了Gordon?因为OP想要两行而不是两列?除此之外,我不知道这是不公平的@gordonlinoff也许是因为有人打败了你?我不知道为什么,这对我来说似乎是个好答案。@Hogan。不仅两列对我更有意义,而且OP已经澄清:“编辑:为了消除混淆,我要找两列,而不是两行。”@Bojan和谁击败了Gordon?这是一个聪明的方法这是一个聪明的方法