Sql 选择2个不同要求的值
我想知道是否可以在一个select语句中选择两个具有不同条件的值。我知道我可以通过子查询实现上述功能,只是想知道是否有更有效的方法来实现 考虑下表: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(*)
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?这是一个聪明的方法这是一个聪明的方法