碰到一个这样的需求,需要查询每天的产量,直接 group 是可以分出不同天的产量,但是如果当天没有生产,就会少一条那一天的记录,而不是那一天显示产量为0,这样不方便前端显示曲线。
于是找到下面的办法,按月份显示产量,如果当天没有生产,产量显示为 0。其他按日,按年查询也可以根据下面的框架修改。
declare @date datetime set @date= '2023-12-01 00:00:00.000'; with t as ( select number 日期 from master..spt_values with(nolock) where type= N'P' and number >= 1 and number <= datediff(DAY, DATEADD(MONTH, DATEDIFF(MONTH,0,@date), 0), DATEADD(MONTH, DATEDIFF(MONTH, 0, @date) + 1, 0)) ), t2 as ( SELECT DATEPART(day, DateTime_Offload) AS [日], count( [ID]) 产量 FROM [dbo].[Production_Data] where DateTime_Offload > dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0, @date), 0)) and DateTime_Offload < dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0, @date) + 1, 0)) and Station_Offload = 'OP265' group by DATEPART(day, DateTime_Offload) ) select 日期, case when (产量 is null) then 0 else 产量 end 产量 from t left join t2 on t.日期 = t2.日
按每个月的实际日期数生成如下(这里值演示了5天,实际查询会显示当月的真实天数):
日期 | 产量 |
1 | 64 |
2 | 0 |
3 | 97 |
4 | 0 |
5 | 0 |