SQL Zeilen zu Spalten
Ich habe eine Tabelle und möchte das transponieren von Zeilen in Spalten, ähnlich einer pivot-Tabelle, aber ohne Zusammenfassung.
Ich habe zum Beispiel den folgenden Tabellen:
Question
--QuestionID
--QuestionText
Response
--ResponseID
--ResponseText
--QuestionID
Grundsätzlich möchte ich in der Lage sein, die zum erstellen einer dynamischen Tabelle so etwas wie:
Question 1 Text | Question 2 Text | Question 3 Text
---------------------------------------------------
Response 1.1 Text | Response Text 1.2 | Response 1.3
Response 2.1 Text | Response Text 2.2 | Response 2.3
Response 3.1 Text | Response Text 3.2 | Response 3.3
Response 4.1 Text | Response Text 4.2 | Response 4.3
Die wichtigste Voraussetzung wäre, weiß ich nicht, zur design-Zeit, was die Frage text.
Bitte kann jemand helfen - ich bin mein Haar ziehen :oS
Im wesentlichen können Sie garantieren, dass es eine Antwort für jede Frage in diesem Szenario.
Die Datenbank-server?
Es werden SQL-Server. Es ist immer blutiger SQL-Server.
Yep, SQL Server. Ich Tat es, was ich brauchte, um mit dem XML und erreichen die aggregation wenn eine Funktion
Es werden SQL-Server. Es ist immer blutiger SQL-Server.
Yep, SQL Server. Ich Tat es, was ich brauchte, um mit dem XML und erreichen die aggregation wenn eine Funktion
InformationsquelleAutor IThasTheAnswer | 2009-07-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht mit
SQL
(außer bei dynamic queries), es sei denn, Sie wissen, die Anzahl der Spalten (ich. e. Fragen) im design der Zeit.Sollten Sie ziehen Sie die gewünschten Daten in Tabellenform und dann verarbeiten es auf der client-Seite:
oder, wahrscheinlich, diese (in
SQL Server 2005+
,Oracle 8i+
undPostgreSQL 8.4+
):Letztere Abfrage werden Ihnen die Ergebnisse in dieser form (vorausgesetzt, Sie haben
4
Fragen):dies ist es wird die Ausgabe der Daten in tabellarischer form, mit
rn
- Kennzeichnung die Nummer der Zeile.Jedes mal, wenn Sie sehen, die
rn
änderung auf dem client, die Sie gerade schließen<tr>
und öffnen Sie die neue.Können Sie sicher stellen Sie Ihre
<td>
's eine pro-resultset-Zeile, da die gleiche Anzahl der Zeilen ist garantiert für jeden zurückgegeben werdenrn
Dies ist eine Recht Häufig gestellte Frage.
SQL
einfach keine richtige tool, um die Daten mit der dynamischen Anzahl von Spalten.SQL
operiert wird, und die Spalte layout ist eine implizite Eigenschaft eines Satzes.Sollten Sie definieren das layout von dem Satz, den Sie wollen, Holen Sie sich in der design-Zeit, wie definieren Sie den Datentyp einer Variable in
C
.C
arbeitet mit streng definierten VariablenSQL
arbeitet mit genau festgelegten sets.Beachten Sie, dass ich sage nicht, dass es die beste Methode möglich. Es ist nur die Art und Weise
SQL
funktioniert.Update:
In
SQL Server
können Sie ziehen Sie die Tabelle inHTML
form direkt aus der Datenbank:Siehe diesen Eintrag in meinem blog für weitere Details:
siehe post aktualisieren
Danke. Ich habe bereits eine ähnliche Lösung an meinem client-Seite, weil ich mich mit XSLT die Daten zu verarbeiten. Das Problem ist, dass ich letztlich wissen müssen, dass die Kombinationen der Ergebnisse, also warum ich wollte, tabellarische Daten aus SQL dann in der Lage sein, um group-by und Aggregatfunktionen
InformationsquelleAutor Quassnoi
Tun, Ihre Gruppierung und Aggregation zunächst mit Quassnoi Antwort als ein Zwischenergebnis.
Crosstabulation sollte nur durchgeführt werden, wenn Sie nicht mehr zu tun-Satz orientiert operatons auf die Ergebnisse. Einige SQL-Dialekte haben keywords wie PIVOT, TRANSFORMIEREN oder KREUZTABELLENDARSTELLUNG um dies zu erreichen, aber du bist wahrscheinlich besser dran, mit Hilfe von XSLT.
InformationsquelleAutor Walter Mitty