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怎么了?请解释一下逻辑