[英]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.