以下是我的代碼,以獲得當天的總數
CREATE PROCEDURE [dbo].[hipos_BC_BH_TEST]
@From_day datetime,
@To_day datetime
AS[/span
BEGIN
declare @fd datetime
set @fd = @From_day
declare @dt table (Day_get nvarchar(50), Totalfloat)
while @fd <= @To_day
begin To_day
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 --增加1天
結束。
選擇 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
20210903 0
202109-04 0
202109-05 316000
2021-09-07 129000
2021-09-08 1547600
2021-09-09 271000
2021-09-10 4765900
我怎樣才能?請幫助我。
uj5u.com熱心網友回復:
你永遠不應該在一個回圈中做這樣的事情。首先,讓我們看看如何為你的范圍內的所有日期生成一個集合:
DECLARE @From_day date = '20210901'。
@To_day date = '20210910';
;WITH n(n) AS?
(
SELECT 1 UNION ALL SELECT n 1 FROM n
WHERE n <= DATEDIFF(DAY, @From_day, @To_day)
)
SELECT Day_get = DATEADD(DAY, n-1, @From_day)
FROM n ORDER BY Day_get;
結果:
Day_get
----------
2021-09-01
2021-09-02
2021-09-03
2021-09-04
2021-09-05
2021-09-06
2021-09-07
2021-09-08
2021-09-09
2021-09-10
現在您只需要將這些日子與您表中的資料進行左鍵連接。所以現在你的(一個!)查詢可以變成:
;WITH n(n) as
(
SELECT 1 UNION ALL SELECT n 1 FROM n
WHERE n <= DATEDIFF(DAY, @From_day, @To_day)
),
d(Day_get)AS
(
SELECT DATEADD(DAY, n-1, @From_day) FROM n
)
INSERT INTO @dt(Day_get, Total)
SELECT d.Day_get, COALESCE(SUM(h.Total),0)。
FROM d
LEFT OUTER JOIN dbo.hipos_BH_Info as h
ON h.Day_get >= d.Day_get
and h.Day_get </span> DATEADD(DAY, 1, d.Day_get)
and h.Cancel_Huy = 0.
GROUP BY d.Day_get;
另外,請永遠不要通過將日期轉換為字串并比較字串來檢查日期是否匹配,并且永遠使用模式前綴...
注意,如果你的日期范圍可以超過100天,你將需要OPTION (MAXRECURSION n).
你將需要OPTION (MAXRECURSION n)。
uj5u.com熱心網友回復:
只要洗掉group by并在選擇資料時交換isnull和sum即可
insert into @dt
Select Day_get = Convert(nvarchar(10), @fd, 20, Total = isnull(sum(Total),0)
from hipos_BH_Info
where Convert(nvarchar(10), Day_get, 20) =@fd
and Cancel_Huy = 0.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/332315.html
標籤:
下一篇:foriinrange(len(firstname)):print(firstname[0])-我如何在一行中列印這個?
