[英]sql weekly totals by weekday
I need to show a weekly total in a calendar way using MS-SQL. 我需要使用MS-SQL以日历方式显示每周总计。 Out of a table like this one:
从这样的表中取出:
Id, auto-increment
WC, text (Departament)
Product, text
StDate, date (Stamp Date)
Completed (T/F)
I can easily create an SQL to sumarize like this: 我可以轻松地创建一个SQL来进行如下总结:
SELECT T.WC, T.StDate, T.Product, Count(T.Id) AS [Daily-Total]
FROM Table T
WHERE (((T.Completed)=True))
GROUP BY T.WC, T.StDate, T.Product
HAVING (((T.StDate)>=Date()-7 And (T.StDate)<=Date()));
And shows something like this: 并显示如下内容:
WC StDate Product Daily-Total
Finish 01/01/2017 Prod03 4
Finish 05/01/2017 Prod02 2
Finish 05/02/2017 Prod02 2
Robot 01/01/2017 Prod01 4
Robot 02/01/2017 Prod03 4
Robot 03/01/2017 Prod02 2
Robot 03/02/2017 Prod02 2
Tack 01/01/2017 Prod01 7
Tack 01/01/2017 Prod02 4
Tack 01/01/2017 Prod03 4
Tack 01/01/2017 Prod04 4
But my boss wants me to show it this way (numbers not real): 但是我的老板要我这样显示(数字不是真实的):
Week10 WC Prod Monday Tuesday Wensday Thrusday Friday Saturday
Tack Prod1 1 0 3 2 0 0
Tack Prod2 0 1 0 1 1 0
Robot Prod2 3 1 2 ...
Finish Prod1 1 4 5 ...
Finish Prod3 3 4...
I thing I would need some nested or sequential Selects but either way I can not find a good solution. 我想我需要一些嵌套或顺序选择,但是无论哪种方式我都找不到一个好的解决方案。
If someone has been through this I appreciate any advice. 如果有人经历过这个问题,我将不胜感激。 Thanks in advance.
提前致谢。
use PIVOT table concept : 使用PIVOT表的概念:
CREATE TABLE #table ( WC VARCHAR(100), StDate DATE , Product VARCHAR(100)
, DailyTotal INT , _DayName VARCHAR(50))
INSERT INTO #table ( WC , StDate , Product , DailyTotal)
SELECT 'Finish','01/01/2017','Prod03', 4 UNION ALL
SELECT 'Finish','05/01/2017','Prod02',2 UNION ALL
SELECT 'Finish','05/02/2017','Prod02',2 UNION ALL
SELECT 'Robot','01/01/2017','Prod01',4 UNION ALL
SELECT 'Robot','02/01/2017','Prod03',4 UNION ALL
SELECT 'Robot','03/01/2017','Prod02',2 UNION ALL
SELECT 'Robot','03/02/2017','Prod02',2 UNION ALL
SELECT 'Tack','01/01/2017','Prod01',7 UNION ALL
SELECT 'Tack','01/01/2017','Prod02',4 UNION ALL
SELECT 'Tack','01/01/2017','Prod03',4 UNION ALL
SELECT 'Tack','01/01/2017','Prod04',4
UPDATE #table SET _DayName = DATENAME(WEEKDAY,StDate)
SELECT *
FROM
(
SELECT WC , StDate , Product , DailyTotal , _DayName
FROM #table
)A
PIVOT
(
SUM(DailyTotal) FOR _DayName IN
(Monday,Tuesday,Wednesday,Thursday,Friday,saturday,sunday)
) AS unpvt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.