Dies wird die erste Frage sein, die ich hier gepostet habe, so entschuldigen Sie alle unbeabsichtigten Fehler in Bord Etikette."Pivoting" nicht aggregierte Daten in SQL Server
In meinem aktuellen Projekt habe ich eine große, nicht normalisierte Tabelle genommen und in vier separate, normalisierte Tabellen aufgeteilt. Mein ultimatives Ziel, das ich für dieses Board erreiche, besteht darin, eine Ansicht zu erstellen, die die nicht normalisierte Tabelle aus Gründen der Abwärtskompatibilität imitiert.
Um eine vereinfachte Momentaufnahme meines Szenario zu bieten, den Kern dessen, was ich versuche, liegt in zwei Tabellen zu tun:
ASSOC_ROLE ASSOCIATE
---------- ----------
assoc_id (fk) assoc_id (pk)
role_id (fk) last_name
org_nbr (fk)
Also, wenn ich die folgende Abfrage ...
SELECT Assoc_Role.org_nbr, Assoc_Role.assoc_id, Associate.last_name, Assoc_Role.role_id
FROM Assoc_Role INNER JOIN
Associate ON Assoc_Role.assoc_id = Associate.assoc_id
WHERE Assoc_Role.org_nbr = '1AA'
... ich erhalte das folgende Ergebnis
gesetztorg_nbr assoc_id last_name role_id
------- -------- --------- -------
1AA 1447 Cooper 1
1AA 1448 Collins 3
1AA 1448 Collins 4
1AA 1448 Collins 5
1AA 1449 Lynch 6
Letzten Endes der Ansicht ich mag würde wie folgt aussehen würde, konstruieren :
org_nbr role1_ID role1_name role2_ID role2_name role3_ID role3_name role4_ID role4_name role5_ID role5_name role6_ID role6_name
------- -------- ---------- -------- ---------- -------- ---------- -------- ---------- -------- ---------- -------- ----------
1AA 1447 Cooper NULL NULL 1448 Collins 1448 Collins 1448 Collins 1449 Lynch
Mein erster Gedanke war, zu versuchen, den PIVOT-Befehl zu verwenden, aber mein Verständnis ist, dass PIVOT eine Art von Aggregation erfordert, und dass mein Szenario nicht paßt. Ich habe auch mit dem CASE-Befehl in der SELECT-Klausel herumgewirbelt, aber meine Ergebnismenge wird nicht auf einen Datensatz reduziert.
Hoffentlich kann jemand etwas Licht darauf werfen, wie ich das erreichen kann. Lassen Sie mich wissen, wenn jemand mehr Informationen benötigt. Vielen Dank!
Scot
Interessant ... Ich bin ziemlich neu in der Bildung von SQL-Abfragen auf dieser fortgeschrittenen Ebene, so hätte ich nie daran gedacht, hintereinander eine Tabelle mit sich selbst zu verbinden, aber kann klar sehen, wie das funktioniert. Meine nächste Herausforderung wird das in eine größere Anfrage einbeziehen, aber das gibt mir einen guten Start. Vielen Dank! Eine Frage obwohl, in Bezug auf: "Natürlich wird dies nicht reichen, sollte die maximale role_id erhöhen ..." Meinen Sie einfach zu sagen, wenn ich weitere role_ID hinzufügen würde, müsste ich sie in der Frage, oder schlägst du mehr vor? – ScottieByNature
@ScottieByNature Wenn die maximale 'role_ID' steigt, haben Sie zwei Möglichkeiten. Wenn die Änderung in der Richtung von "es gab früher höchstens 6, aber jetzt sind es höchstens 9" ist, müssten Sie die Abfrage in dem, was ich hoffe, ist der klare Weg hinzufügen. Wenn jedoch "es wird jetzt eine beliebige Anzahl von möglichen Rollen geben", dann sollte ein anderer Ansatz gesucht werden - in diesem Fall kommen die Überlegungen von @Chris Lively ins Spiel, und Sie sollten darüber nachdenken, dies außerhalb von SQL zu tun oder dynamisch zu verwenden SQL, oder etwas ganz anderes - Sie könnten kommen und fragen Sie hier :) – AakashM
Verstanden ... sehr geschätzt! – ScottieByNature