SQL Server-Pivot mit Datum Reicht da Spalten
Ich habe eine Tabelle mit der folgenden Struktur Aufzeichnung Mitarbeiter Ankunft und Zerstreuung Zeiten:
Was ich mir erhoffe zu erreichen, die in einer Abfrage/stored procedure ist eine pivot-geben Daten zurück, die zwischen Datum reicht, wie pro unten raster auf dem beigefügten Bild.
Könnte ich bitte Ihr know-how oder Beispiel, wie bekommen es zu tun? Ich habe geforscht aber alle meine Bemühungen blieben bisher ohne Erfolg.
Werden Sie jemals mehrere Einträge für jedes
Hallo bluefeet ja mehrere Einträge pro Benutzerkennung und / oder DateIn - die Zeiträume können vom user ausgewählt werden, also gehe ich davon aus Dynamik ist die richtige Antwort.
Wenn ich hinzufügen darf ich glauben, dass die pivot-Funktion ist nicht verfügbar in sql 2000-das ist die wichtigste Ursache meines Todes 😛 ich bin momentan auf einer Kreuztabellenabfrage Lösung.
Verwenden Sie SQL Server 2000?
Ja ich verstehe, das ist, wo das problem ist leider 🙁
userid
/DateIn
Kombination? Sind Sie auf der Suche nach einer dynamischen Lösung oder erfahren Sie Ihre Termine vor der Zeit?Hallo bluefeet ja mehrere Einträge pro Benutzerkennung und / oder DateIn - die Zeiträume können vom user ausgewählt werden, also gehe ich davon aus Dynamik ist die richtige Antwort.
Wenn ich hinzufügen darf ich glauben, dass die pivot-Funktion ist nicht verfügbar in sql 2000-das ist die wichtigste Ursache meines Todes 😛 ich bin momentan auf einer Kreuztabellenabfrage Lösung.
Verwenden Sie SQL Server 2000?
Ja ich verstehe, das ist, wo das problem ist leider 🙁
InformationsquelleAutor El Paccino | 2014-03-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die PIVOT-Funktion, um das endgültige Ergebnis, aber da Sie die Aggregation ein
string
/time
Wert, dann werden Sie auch brauchen, um eine windowing Funktion wierow_number()
auf mehrere Zeilen zurückgeben für jedeuserid
/datein
Kombination.Ich würde eine Unterabfrage verwenden, die der folgenden ähnelt, um wieder Ihre Daten mit einer eindeutigen Sequenznummer für jedes
userid
/datein
combo:Sobald Sie diese Daten haben, dann können Sie ganz einfach anwenden pivot:
Dann, wenn Sie haben eine unbekannte Anzahl von Werten, dann werden Sie wollen, um dynamisches SQL verwenden:
Wenn Sie die Aggregation ein string/Datum oder etwas, das Sie verwenden muss
max
/min
, dann wirst du am Ende nur die Rückgabe eines Werts für jedes Element, das Sie gruppieren lassen. Durch die Schaffung einer einzigartigen Sequenz auf der Grundlage derdatein
/userid
wenn das group by angewendet wird Sie werden mehrere Zeilen zurückgeben von Daten.Ich habe in der Zwischenzeit zog die db auf sql 2005 und es funktionierte perfekt. bluefeet danke für all deine Mühe und Zeit investiert, um zu helfen.
InformationsquelleAutor Taryn
Ich würde noch ein DISTINCT auf die folgende Zeile:
InformationsquelleAutor Rajan