[英]SQL Group by Day of Week
使用SQL Server2012。我有一個具有兩個字段的視圖-機器日期和總分鍾數。 該視圖僅顯示前一周的數據-效果很好。 然后,我使用下面的SQL基於此視圖創建另一個視圖:
SELECT
CASE WHEN DATENAME(dw, MachineMidLineDate) = 'Sunday' THEN [Total Mins] END AS Sun,
CASE WHEN DATENAME(dw, MachineMidLineDate) = 'Monday' THEN [Total Mins] END AS Mon,
CASE WHEN DATENAME(dw, MachineMidLineDate) = 'Tuesday' THEN [Total Mins] END AS Tues,
CASE WHEN DATENAME(dw, MachineMidLineDate) = 'Wednesday' THEN [Total Mins] END AS Wed,
CASE WHEN DATENAME(dw, MachineMidLineDate) = 'Thursday' THEN [Total Mins] END AS Thursday,
CASE WHEN DATENAME(dw, MachineMidLineDate) = 'Friday' THEN [Total Mins] END AS Friday,
CASE WHEN DATENAME(dw, MachineMidLineDate) = 'Saturday' THEN [Total Mins] END AS Sat
FROM
dbo.vw_Machine_Minutes_Overview
但是,結果不是一行,它們隨着一周的每一天而增加,即
Sun Mon Tues Wed Thurs Fri Sat
10
15
25
20
21
12
但是我需要結果顯示如下:
Sun Mon Tues Wed Thurs Fri Sat
10 15 25 20 21 12
我要去哪里錯了?
您要聚合:
SELECT SUM(CASE WHEN DATENAME(dw, MachineMidLineDate) = 'Sunday' THEN [Total Mins] END) AS Sun,
SUM(CASE WHEN DATENAME(dw, MachineMidLineDate) = 'Monday' THEN [Total Mins] END) AS Mon,
. . .
FROM dbo.vw_Machine_Minutes_Overview;
關於使用pviot的評論是另一種實現方式:
工作示例: http : //data.stackexchange.com/stackoverflow/revision/749735/930554/pivot-data-by-day-of-week-from-date-field
我發現語法有點混亂,但這應該可以工作:
select *
from
(
select datepart(dw,[MachineMidLineDate]) as DayOfWeek, [Total Mins]
from #vw_Machine_Minutes_Overview
) src
pivot
(
sum([Total Mins])
for DayOfWeek in ([1], [2], [3],[4],[5],[6],[7])
) piv;
datepart(dw,[MachineMidLineDate])
部分返回表示星期幾的1到7之間的數字,該數字用於指定[1],[2],[3]...
部分中的列。查詢。
datepart: https : //docs.microsoft.com/zh-cn/sql/t-sql/functions/datepart-transact-sql
樞紐: https : //technet.microsoft.com/zh-CN/library/ms177410(v = sql.105).aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.