2016-04-27 333 views
-3

我試圖按星期日期將SQL Server中的訂單列表分組。使用下面的SQL我得到以下結果:SQL按周分組日期

SELECT cast(datepart(wk, created) [week], count(1) [number of orders] 
FROM Orders 
GROUP BY datepart(wk, created) 

Week - Number of Orders 
15 - 305 
16 - 285 
17 - 428 

我想要做的是,而不是顯示週數,

Week -  Number of Orders 
11/04/2016 - 305 
18/04/2016 - 285 
25/04/2016 - 428 

任何想法?

+0

確實在週日或週一的一週的開始? – Quassnoi

+0

星期從星期天開始,但星期一也能看到答案。 – user1786107

回答

3

這讓我星期一..

SELECT DATEADD(Week, DATEDIFF(week, 0, created), 0) [week], 
     count(1) [number of orders] 
FROM Orders 
GROUP BY DATEADD(Week, DATEDIFF(week, 0, created), 0) 

如果上面給你週一,這應該給你星期天

DATEADD(Week, DATEDIFF(week, 0, created), -1) 
+1

我認爲這很接近,但不完全正確。對我來說,它似乎會返回一個星期一開始的星期,但它計算在星期一_before_開始的第7天期間發生的項目。嗯。 – samthebrand

+1

@samthebrand從我記得,這取決於你的'DateFirst'值設置爲什麼。 https://docs.microsoft.com/en-us/sql/t-sql/statements/set-datefirst-transact-sql – JamieD77

2
SELECT DATEADD(day, 1 - DATEPART(weekday, created), CAST(created AS DATE)), 
     COUNT(*) 
FROM Orders 
GROUP BY 
     DATEADD(day, 1 - DATEPART(weekday, created), CAST(created AS DATE)) 

您可以使用SET DATEFIRST來控制每週開始日期。

+0

WEEKDAY是DAX功能,所以不適合我。 TSQL中是否有類似的東西? – user1786107