简体   繁体   English

sql按周划分的每周总计

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM