【发布时间】:2021-09-21 18:44:17
【问题描述】:
这是我获取总天数的代码
CREATE PROCEDURE [dbo].[hipos_BC_BH_TEST]
@From_day datetime,
@To_day datetime
AS
BEGIN
declare @fd datetime
set @fd = @From_day
declare @dt table (Day_get nvarchar(50), Total float)
while @fd <= @To_day
begin
insert into @dt
Select Day_get = Convert(nvarchar(10), @fd, 20), Total = sum(isnull(Total,0))
from hipos_BH_Info
where Convert(nvarchar(10), Day_get, 20) = @fd
and Cancel_Huy = 0
group by Day_get, Total
set @fd = @fd + 1 --Add 1 day
end
Select Day_get, Total = isnull(sum(Total),0)
from @dt
group by Day_get
END
从 '2021-09-01' 到 '2021-09-10' 执行后,结果是
Day_get Total
2021-09-01 1106000
2021-09-02 3249600
2021-09-05 316000
2021-09-07 129000
2021-09-08 1547600
2021-09-09 271000
2021-09-10 4765900
我需要它显示日期“2021-09-03”和“2021-09-04”,总 = 0 为
Day_get Total
2021-09-01 1106000
2021-09-02 3249600
2021-09-03 0
2021-09-04 0
2021-09-05 316000
2021-09-07 129000
2021-09-08 1547600
2021-09-09 271000
2021-09-10 4765900
我该怎么办?请帮帮我。
p/s : 我找到了方法,在循环中通过 UNION ALL 添加一个值 = 0 的 cmd 选择
UNION ALL
Select Day_get = Convert(nvarchar(10), @fd, 20), Total = 0
【问题讨论】:
-
首先将日期插入表变量 dt,总值为 0,然后在 dt 和您的表之间使用 CROSS APPLY 来更新总值。 mssqltips.com/sqlservertip/1958/…
-
请修剪您的代码,以便更容易找到您的问题。请按照以下指南创建minimal reproducible example。
标签: sql sql-server tsql