查询两个不同的where条件

时间:2017-06-19 15:20:13

标签: sql

我有一张表图书,用户可以捐赠书籍数量:

 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

1 个答案:

答案 0 :(得分:0)

您需要进行某种分组或条件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)和日期值之间的月数来获取月初的日期。此逻辑为您的date值和今天(getdate()函数)返回的日期将返回同一月份的同一个月份的同一个月份。通过添加少一个月(上面的脚本中的-1),您可以获得上个月的开头,然后您也可以将其与date值进行比较,以获得books的数量上个月。

sumgroup by可以将您的数据“展平”为每username个值的一行。