2016-04-05 20 views
1

Ich habe Daten wie diese, die ich Matrix-Ergebnis wie Zeilen in Spalte erstellen möchte.SQL Query Pivot-Tabelle Zeilen in Spalten

Seq JobNo  TrnDate  TrnHour 
1 J-000198 2016-04-02 5 
2 J-000198 2016-04-03 4 
3 J-000198 2016-04-04 8 
4 J-000198 2016-04-05 7 
5 J-000198 2016-04-06 2 
6 J-000198 2016-04-07 3 
7 J-000198 2016-04-08 6 

Am 2016-04-02 TrnDate war der Tag Samstag und so weiter. Ich möchte Ergebnis wie diese durch SQL-Abfrage und in Gridview auffüllen, um von einem Benutzer hinzufügen/bearbeiten.

Saturday Sunday Monday Tuesday Wednesday Thursday Friday 
02  03  04  05  06  07  08 
5  4  8  7  2   3  6 

Ist das möglich? Bitte helfen Sie. Dank

Edited ---------

Sein ein kompletter Monat Einträge für jeden JobNo. Es macht die Summe für jeden Tag. Wenn ich zum Beispiel eine weitere Zeile addiere, ergibt sich die Summe für Samstag, Datum 9 + 2 = 11 und Stunden 5 + 5 = 10. Ich möchte, dass es für jede Woche getrennt ist.

Seq JobNo  TrnDate  TrnHour 
8 J-000198 2016-04-09 5 

Antwort

2

Versuchen Sie folgendes:

SELECT col, [Saturday], [Sunday], [Monday], [Tuesday], 
     [Wednesday], [Thursday], [Friday] 
FROM (
    SELECT JobNo, x.col, x.val, 
     DATENAME(WEEKDAY, TrnDate) AS d 
    FROM mytable 
    CROSS APPLY (
    VALUES ('Hour', TrnHour), 
      ('Day', DATEPART(dd, TrnDate))) x(col, val) 
) AS src 
PIVOT (SUM(val) FOR d IN ([Saturday], [Sunday], [Monday], [Tuesday], 
          [Wednesday], [Thursday], [Friday])) AS pvt 

Demo here

Um unterschiedliche Wochen Konto müssen Sie die Wochennummer in der SELECT Klausel der verwendeten Abfrage umfassen die Quelltabelle des PIVOT zu erzeugen Betrieb:

SELECT col, w, [Saturday], [Sunday], [Monday], [Tuesday], [Wednesday], [Thursday], [Friday] 
FROM (
    SELECT JobNo, x.col, x.val, 
     DATEPART(WEEK, TrnDate) AS w, 
     DATENAME(WEEKDAY, TrnDate) AS d 
    FROM mytable 
    CROSS APPLY (
    VALUES ('Hour', TrnHour), ('Day', DATEPART(dd, TrnDate))) x(col, val) 
) AS t 
PIVOT (SUM(val) FOR d IN ([Saturday], [Sunday], [Monday], [Tuesday], 
           [Wednesday], [Thursday], [Friday])) AS pvt 
ORDER BY w, col 

Demo here

+0

Vielen Dank für die Antwort Giorgos Betsos. Ich habe meinen Beitrag bearbeitet. Ich habe mehrere Zeilen bedeutet komplette Monatszeilen. Ich möchte für jede Woche ein separates Ergebnis behalten, aber es fasst die Werte zusammen – Raja

+0

@Raja Sie können die obige Abfrage leicht ändern, um separate Wochen zu berücksichtigen. Fügen Sie einfach die Wochennummer in die SELECT-Klausel der abgeleiteten Tabelle "src" ein. –

+0

Ich könnte das nicht tun. Ich bekomme die Wochennummer wie dieses Datum (Tag, datediff (Tag, 0, TrnDate)/7 * 7)/7 + 1 aber weiß nicht, wie man es in deine Anfrage einfügt – Raja

0

Sie können dies tun.

SELECT info, [Saturday], [Sunday], [Monday], [Tuesday],[Wednesday],[Thursday], [Friday] 
FROM (
    SELECT 'Total Hour' as info, JobNo, trnHour,DATENAME(WEEKDAY, TrnDate) AS d FROM JobTable 
    union all 
    SELECT 'Date' info,JobNo, datepart(day,TrnDate) as trnHour,DATENAME(WEEKDAY,TrnDate) AS d FROM JobTable 
) AS src 
PIVOT (SUM(trnHour) FOR d IN ([Saturday], [Sunday], [Monday], [Tuesday],[Wednesday], [Thursday], [Friday])) AS pvt 

Wochenweise.

SELECT [week],info, [Saturday], [Sunday], [Monday], [Tuesday],[Wednesday],[Thursday], [Friday] 
FROM (
    SELECT 'Total Hour' as info, JobNo, trnHour,DATENAME(WEEKDAY, TrnDate) AS d,datepart(week,TrnDate) [week] FROM JobTable 
    union all 
    SELECT 'Date' info,JobNo, datepart(day,TrnDate) as trnHour,DATENAME(WEEKDAY,TrnDate) AS d,datepart(week,TrnDate) [week] FROM JobTable 
) AS src 
PIVOT (SUM(trnHour) FOR d IN ([Saturday], [Sunday], [Monday], [Tuesday],[Wednesday], [Thursday], [Friday])) AS pvt 
+0

Eine Klammer fehlt am [Mittwoch]. FYI – smoore4

+0

Danke, aber es zeigt das gleiche Ergebnis wie @Giorgos – Raja

+0

Dank @SQLDBA .. – Husen

Verwandte Themen