Sql 使用两个不同的where条件进行查询

Sql 使用两个不同的where条件进行查询,sql,Sql,我有一个表图书,其中用户捐赠的图书数量: username books date ____________________________________ Jon 3 2017-06-12 Jon 2 2017-05-20 Mary 4 2017-05-12 我想要像这样的东西 username This month Previous Month _________________________

我有一个表图书,其中用户捐赠的图书数量:

 username   books  date
 ____________________________________ 
 Jon        3      2017-06-12
 Jon        2      2017-05-20
 Mary       4      2017-05-12
我想要像这样的东西

username    This month   Previous Month
_______________________________________________
Jon           3                2

您将需要某种分组或有条件的
sum
操作。在你的问题中获得结果的最简单的方法——尽管它实际上可能不适合你的需要——是:

select username
      ,sum(case when dateadd(datediff(month,0,[date]),0) = dateadd(datediff(month,0,getdate()),0) then books else 0 end as ThisMonth
      ,sum(case when dateadd(datediff(month,0,[date]),0) = dateadd(datediff(month,0,getdate())-1,0) then books else 0 end as PreviousMonth
from books
where username = 'Jon'
group by username
显然,如果问题中有更多的细节,您可以得到一个更合适的答案,如果您使用的是不同的DBMS,那么这个答案并不特定于SQL Server。也就是说,条件逻辑和日期逻辑在所有其他DBMS实现中都是相同的,您可能只需要更改函数名

这是通过将任意开始日期(上述函数中的
0
s)和日期值之间的月数相加来获得月初的日期。此逻辑为您的
date
值和今天返回的日期(函数
getdate()
将返回同一个日历月内的相同月初。通过少加一个月(上面脚本中的
-1
),您可以得到上个月的开始,然后您还可以将其与
日期
值进行比较,以获得上个月的
书籍
数量


sum
groupby
用于将您的数据“展平”到每个
username
值的一行中。

您使用的是哪种DBMS?请阅读并展示您的尝试
GROUP BY
DATEPART
会让你走得更远。对于投票人,你也应该阅读。不要同情那些不完整的问题。@CodeCaster-在知道全部细节之前,不要向你提出任何建议
DATEPART
在所有数据库中都不起作用Mary怎么了?请解释一下逻辑