認識到這是一個常見問題,回答了很多次,我還沒有找到我的查詢的解決方案。
我的 SQLServer @@DateFirst = 7(星期日),我正試圖從星期一到星期日按周對一段時間的發票 [日期] 進行分組。
查詢作業正常,但星期日日期被分組到下一個星期一組中。我明白為什么會這樣,但找不到解決方案。我無法創建函式,所以這些方法也無濟于事。
SELECT
DATEADD(WEEK, DATEDIFF(WEEK,0, [DATE]), 0) AS 'DATE GROUP'
,[BRANCH]
,[SUNDTYPE]
,COUNT([INV_NUM]) AS 'Number of Sundrys'
,SUM([COST]) AS 'Sundry Rev'
FROM Invoice_Table
WHERE [DATE] BETWEEN '2022-03-07 00:00:00.000' AND '2022-03-13 00:00:00.000'
GROUP BY DATEADD(WEEK, DATEDIFF(WEEK,0, [DATE]), 0), SUNDTYPE, BRANCH
SQL Server 是 2012
DATEADD 和 DATEDIFF 將所有日期分組到每周的星期一,期望星期一到星期日的日期全部分組在一起
uj5u.com熱心網友回復:
您應該可以通過將有問題的日期向后移動 1 天來偽造它。這樣,您正在尋找的是
Mon Tue Wed Thu Fri Sat Sun
但是 WEEK 功能是基于
Sun Mon Tue Wed Thu Fri Sat
因此,例如,如果您基于本周的資料是
Date IS What you ARE getting What you want
Fri Apr 1 Week X Week X
Sat Apr 2 Week X Week X
Sun Apr 3 Week Y Week X
Mon Apr 4 Week Y Week Y
Tue Apr 5 Week Y Week Y
只需從根據周函式()檢查的相關日期中減去 1 天,因此將所有天數回滾 1 使星期一看起來像星期天,這是您正確的斷點,并且星期日回滾到前一周的星期六。
DATEADD(WEEK, DATEDIFF(WEEK,0, dateadd( day, -1, [Date])), 0) AS 'DATE GROUP'
然后,您可以將日期重新添加到 1 天以重新校準到星期一以用于顯示目的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/456826.html
