我需要一个查询,该查询仅按天,长期,按日分组计算销售额。目前,我正在使用or,并且输出对我来说很好,但是我希望有一个月,所以根本不是解决方案。当然,在excel中用conactenate编写长期的“或”很容易,但是-如果可能的话-当我只需要操纵数据作用域时,我希望将它放在一两个条件下。
select format(sale_date_time, 'dd/MM'), sum(sale)
from dbo.Sales
where sale_date_time between '2018-10-29 06:00' and '2018-10-29 10:00' or
sale_date_time between '2018-10-30 06:00' and '2018-10-30 10:00'
group by format(sale_date_time, 'dd/MM')
答案 0 :(得分:0)
假设我理解了这个问题-您可以在sale_date_time
列的日期和时间部分使用单独的条件:
select format(sale_date_time, 'dd/MM'), sum(sale)
from dbo.Sales
where sale_date_time >= '2018-10-01 00:00'
and sale_date_time < '2018-11-01 00:00' -- all of October
and CAST(sale_date_time as time) >= '06:00:00'
and CAST(sale_date_time as time) <= '10:00:00'
group by format(sale_date_time, 'dd/MM')
请注意,通过将sale_date_time
强制转换为time
,可以防止SQL Server使用任何可能与此列相关的索引-因此,更好的选择可能是存储日期和时间销售分成两个不同的列-一个列为date
,另一个列为time
。