Ich habe effektiv eine Tabelle mit zwei wichtigen Feldern. ReadyDate und CompleteDate.
Ich möchte, dass meine Ausgabe 24 Spalten enthält, die einer Stunde des Tages entsprechen. Jede Spalte gibt mir die Anzahl der Datensätze an, die noch "offen" waren (definiert als ReadyDate vor dem Ende der Stunde, aber CompleteDate nach dem Ende einer Stunde). während dieser Uhr Stunde.
Der Trick besteht also darin, dass ein Datensatz in null oder mehr Spalten angezeigt werden kann. Etwas, das um 6:05 Uhr ReadyDate und um 9:17 Uhr CompleteDate war, wird in der Spalte 6: 00a, 7: 00a und 8: 00a angezeigt.
Also, wenn die Tabelle die folgenden Einträge hat
10-14-2019 06:05 10-14-2019 06:10 (this will populate no columns)
10-14-2019 07:12 10-14-2019 09:30 (this will populate the 7:00 hour and 8:00 hour)
10-14-2019 10:02 10-14-2019 13:55 (this will populate the 10:00 hour, 11:00, 12:00)
10-14-2019 12:50 10-14-2019 15:30 (this will populate the 12:00, 13:00, 14:00)
Ich würde erwarten, dass meine Ausgabe 24 Spalten mit den folgenden Zahlen 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 2, 1, 1, 0, 0, 0, 0 enthält. 0, 0, 0, 0, 0, 0
Ich weiß nicht, wie ich vorgehen soll. Alle Einblicke wäre dankbar
EDIT-CORRECTED für eine Schicht von 1 Stunde
Hier ist eine PIVOT-Option, die eine Ad-hoc-Abrechnungstabelle verwendet.
Die Rolle über Mitternacht wird berücksichtigt.
Nicht klar, ob Sie Zeilen nach Datum wollten. Wenn nicht, wäre es eine kleine Sache zu entfernen.
Beispiel
;with cte1 as (
Select Date = convert(date,D)
,Item = datepart(hour,D)
,Value = 1
From YourTable A
Cross Apply (
Select Top (DateDiff(HOUR,ReadyDate,CompleteDate)+0)
D=DateAdd(HOUR,-1+Row_Number() Over (Order By (Select Null)),ReadyDate)
From master..spt_values n1,master..spt_values n2
) B
), cte2 as (
Select Date
,B.Item
,B.Value
From (Select distinct Date from cte1 ) a
Cross Join (Select Top 24 Item=-1+Row_Number() Over (Order By (Select NULL)),Value=0 From master..spt_values n1 ) B
)
Select *
From (Select * from cte1
Union All
Select * from cte2
) src
Pivot (sum(Value) for Item in ([0] ,[1] ,[2] ,[3] ,[4] ,[5] ,[6] ,[7] ,[8] ,[9] ,[10],[11],
[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23]) ) pvt
Kehrt zurück
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen