Konvertieren von Zeilen in Spalten in SQL SERVER 2008
In SQL Server 2008,
Ich habe eine Tabelle für die Nachverfolgung des status Geschichte von Handlungen ( STATUS_HISTORY
), die drei Spalten ([ACTION_ID],[STATUS],[STATUS_DATE]
).
Jeder ACTION_ID
haben kann, eine variable Anzahl von Status und status-Daten.
Ich konvertieren müssen diese Zeilen in Spalten, die vorzugsweise etwa so Aussehen:
[ACTION_ID], [STATUS_1], [STATUS_2], [STATUS_3], [DATE_1], [DATE_2], [DATE_3]
Dem die Gesamtanzahl der Spalten status und Datum-Spalten ist unbekannt, und - natürlich - DATE_1
entspricht STATUS_1
usw. Und ich möchte für die status werden in chronologischer Reihenfolge (STATUS_1
hat das früheste Datum, etc).
Grund für mich dies zu tun ist, so kann ich die 10 letzten Statusmeldungen auf einen Bericht in einer Access ADP, zusammen mit anderen Informationen, die für die einzelnen Maßnahmen. Mit einem Unterbericht mit jedem status in eine neue Zeile bewirkt, dass der Bericht viel zu groß.
Gibt es eine Möglichkeit, dies zu tun mit PIVOT
? Ich will nicht, um das Datum oder den status als Spaltenüberschrift.
Ist es überhaupt möglich?
Ich habe keine Ahnung, wo Sie beginnen sogar. Es macht mein Kopf weh.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lassen Sie uns annehmen, dass für die Kürze, dass Sie nur wollen, 3 die letzten Status für jeden
action_id
(wie in deinem Beispiel).Dann diese Abfrage mit CTE sollte den job tun:
NULL
Werte erscheinen in den Zeilen, wo dieaction_id
hat weniger als 3status
-es.JOIN
s obwohlSELECT action_id,max(case when rownr=1 then status end) AS status_1,max(case when rownr=2 then status end) AS status_2,max(case when rownr=3 then status end) AS status_3,max(case when rownr=1 then status_date end) AS date_1,max(case when rownr=2 then status_date end) AS date_2,max(case when rownr=3 then status_date end) AS date_3 FROM rownrs WHERE rownr< = 3 group by action_id
Hatte ich noch nicht, es zu tun mit zwei Spalten, aber eine PIVOT-klingt wie, was Sie sollten versuchen. Ich habe dies in der Vergangenheit mit Daten aus einem ResultSet, wo ich das benötigte Datum in jede Zeile, die sich in den Spalten auf der Oberseite.
http://msdn.microsoft.com/en-us/library/ms177410.aspx
Sympathisiere ich mit den Kopfschmerzen zu versuchen zu entwerfen und zu visualisieren, aber der beste, was zu tun ist, versuchen Sie, es arbeite mit einer der Spalten, und dann gehen von dort aus. Es hilft, sobald Sie anfangen zu spielen mit ihm.