2017-03-21 2 views
0

Ich muss eine wöchentliche Summe in einem Kalenderweg mit MS-SQL anzeigen. Aus einer Tabelle wie folgt ein:sql wöchentliche Summen nach Wochentag

Id, auto-increment 
WC, text (Departament) 
Product, text 
StDate, date (Stamp Date) 
Completed (T/F) 

Ich kann eine SQL sumarize wie diese einfach erstellen:

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())); 

Und so etwas wie dies zeigt:

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 

Aber mein Chef will, dass ich es so zeige (Zahlen nicht 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... 

Ich denke, ich würde einige verschachtelte oder sequenzielle Selects benötigen, aber so oder so kann ich keine gute Lösung finden.

Wenn jemand dies durchgemacht hat, schätze ich jeden Rat. Vielen Dank im Voraus.

+0

Lookup 'PIVOT für SQL Server' – cha

Antwort

0

Verwendung PIVOT Tischkonzept:

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 
+0

@ Juan M. Chapa, versuchen Sie oben PIVOT query.Is es Ihr Ergebnis gibt oder nicht ...? – Mansoor

+0

** Absolut getan! ** Tolle Idee, vielen Dank. Ich habe schließlich herausgefunden, dass das ERP, das ich verwende, ein _dashboard_ Dienstprogramm hat, das mir hilft, die Pivot-Tabelle per Drag & Drop zu erstellen. Es hat super funktioniert, vielen Dank @Mansoor. –

Verwandte Themen