Gibt es eine Möglichkeit, Zeilen zu Spalten in SQL Server zu transponieren (in MS-Access ist das möglich)? Ich war verwirrt, weil diese Möglichkeit in MS-Access, aber nicht in SQL Server verfügbar ist. Ist es von Entwurf, dass diese Funktion nicht in SQL Server enthalten ist?
Das Beispiel in Ссылка funktioniert nur, wenn Sie im Voraus wissen, was die Zeilenwerte sein können. Angenommen, Sie haben eine Entität mit benutzerdefinierten Attributen, und die benutzerdefinierten Attribute werden als Zeilen in einer untergeordneten Tabelle implementiert, wobei die untergeordnete Tabelle im Grunde Variablen / Wert-Paare ist und diese Variablen / Wert-Paare konfigurierbar sind.
%Vor%Ich werde eine Technik beschreiben, die funktioniert. Ich habe es benutzt. Ich fördere es NICHT, aber es funktioniert.
Um die Daten zu pivotieren, bei denen Sie nicht wissen, was die Werte im Voraus sein können, erstellen Sie im Handumdrehen eine temporäre Tabelle ohne Spalten. Verwenden Sie dann einen Cursor, um durch Ihre Zeilen zu laufen, und erstellen Sie eine dynamisch erstellte "alter table" für jede Variable, so dass Ihre temporäre Tabelle am Ende die Spalten, Farbe, Größe und Stadt enthält.
Dann fügen Sie eine Zeile in Ihre temporäre Tabelle ein, aktualisieren sie über einen anderen Cursor durch die Variable, Wertepaare und wählen sie dann aus, normalerweise mit ihrer übergeordneten Entität verbunden, so dass diese benutzerdefinierten Variablen / Wert-Paare tatsächlich erscheinen wie integrierte Spalten in der ursprünglichen übergeordneten Entität.
Die beschriebene Cursormethode ist wahrscheinlich die am wenigsten SQL-ähnliche Methode. Wie erwähnt, hat SQL 2005 und auf PIVOT, die gut funktioniert. Aber für ältere Versionen und Nicht-MS-SQL-Server, die Rozenshtein-Methode von "Optimizing Transact-SQL" (Bearbeiten: vergriffen, aber in Anspruch genommen von Amazon: Ссылка ), eignet sich hervorragend zum Pivotieren und Unpivoting von Daten. Es verwendet Punktmerkmale, um zeilenbasierte Daten in Spalten umzuwandeln. Rozenshtein beschreibt mehrere Fälle, hier ein Beispiel:
%Vor%Diese Methode ist viel effizienter als die Verwendung von Case-Anweisungen und funktioniert für eine Vielzahl von Datentypen und SQL-Implementierungen (nicht nur MS SQL).
Am besten ist es, diese Art von Dingen auf einen kleinen Maßstab zu beschränken. Wenn Sie jedoch SQL 2k verwenden und keine PIVOT-Funktionen zur Verfügung haben, habe ich einen gespeicherten Proc entworfen, der die Aufgabe für Sie erledigen sollte. Etwas von einem Pfusch Eile Job so ziehen Sie auseinander, so viel Sie möchten. Fügen Sie das Folgende in ein SQL-Fenster ein und bearbeiten Sie das EXEC am unteren Rand wie gewünscht. Wenn Sie sehen möchten, was generiert wird, entfernen Sie die --s in der Mitte:
%Vor%Ich habe Daten im folgenden Format
Survey_question_ID
E-Mail (Benutzer )
Antwort
für 1 Umfrage gibt es 13 Fragen und Antworten Die gewünschte Ausgabe, die ich wollte, war
Benutzer --- Survey_question_ID1 --- Survey_question_ID2
email --- Antworten --- answer ........ so weiter
Hier ist die Lösung für SQL Server 2000 , Ursache Feld Datentyp ist TEXT .
%Vor%Tags und Links sql-server pivot