2017-10-31 2 views
1

Verwenden von SQL Server 2012. Ich habe eine Ansicht mit zwei Feldern - Maschinendatum und Gesamtminen. Die Ansicht zeigt nur Daten der letzten Woche an - das funktioniert einwandfrei. Ich habe dann eine andere Ansicht auf der Grundlage dieser Ansicht, die die unter Verwendung von SQL:SQL-Gruppe nach Wochentag

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 

Allerdings sind die Ergebnisse nicht auf einer Linie, sie steigen mit jedem Tag der Woche, dh

Sun Mon Tues Wed Thurs Fri Sat 
10  
     15 
       25 
        20 
          21 
           12 

Aber ich brauche Die Ergebnisse werden wie folgt angezeigt:

Sun Mon Tues Wed Thurs Fri Sat 
10  15  25 20 21 12 

Wohin gehe ich falsch?

+0

Ihre Google-Suche String 'SQL Server Pivot query'. –

+0

Ich folge nicht - ich verwende nicht den Befehl PIVOT? – Michael

+0

@Michael, der Pivot-Befehl macht das alles auf einmal (irgendwie) Ich habe eine Antwort für Sie gepostet, um einen Blick darauf zu werfen – gordatron

Antwort

1

Sie wollen Aggregation:

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; 
1

Der Kommentar über pviot mit anderen Weg, es zu tun ist:

Arbeitsbeispiel: http://data.stackexchange.com/stackoverflow/revision/749735/930554/pivot-data-by-day-of-week-from-date-field

ich die Syntax ein wenig verwirrend finden, aber dies sollte Arbeit:

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; 

Der datepart(dw,[MachineMidLineDate])-Teil gibt eine Zahl zwischen 1 und 7 zurück, die den Wochentag darstellt, mit dem die Spalten im [1],[2],[3]...-Teil der Abfrage angegeben werden.

Datumsteil: https://docs.microsoft.com/en-us/sql/t-sql/functions/datepart-transact-sql

Dreh: https://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

Verwandte Themen