Durch die Auswahl von Werten Aus einer Tabelle die Spaltenüberschriften
Ich habe eine Tabelle 'propertyvalues' wie folgt:
ID FileID Eigenschaft Wert
1 x Name 1.pdf
2 x Größe 12567
3 x Typ application/pdf
4 J Name 2.pdf
5 y Größe 23576
6 y-Typ application/pdf
......
und so weiter
Schreiben wie man eine SQL-Abfrage auf die Tabelle oben zu Holen, ein Ergebnis wie unten
FileID Name Größe Typ
x 1.pdf-12567 application/pdf
y 2.pdf-23576 application/pdf
- möglich, Duplikat der Holen Sie sich ZEILEN wie SPALTEN (SQL Server, dynamische PIVOT-Abfrage)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer version mit joins arbeitet unabhängig von fehlenden Zeilen:
Wenn Sie eine Tabelle, wo
FileID
ist der Primärschlüssel, können Sie ersetzen Sie dieDISTINCT
Unterabfrage mit in der Tabelle.In Bezug auf Effizienz, es hängt von vielen Faktoren ab. Beispiele:
Alles tun, FileIDs Zeilen mit Name, Größe und Typ, und keine anderen Eigenschaften (und Ihre Tabelle besitzt einen gruppierten index auf
(FileID, Property)
)? Dann dieMAX(CASE...)
version durchführen würden ziemlich gut, da die gesamte Tabelle gescannt werden müssen sowieso.Gibt es (viele) mehr als 3 Eigenschaften und eine Menge von FileIDs have no Name, Größe und Typ, dann die
JOIN
version gut funktionieren würde, mit einem index auf(Property, FileID) INCLUDE (Value)
als nur diese index-Daten verwendet werden würden, für die verbindet.Nicht sicher, wie effizient ist die
PIVOT
version.Was ich vorschlagen, ist aber zum testen der verschiedenen Versionen mit Ihren Daten und die Tabelle der Größen, die in Ihrem envirorment (version, Festplatte, Speicher, Einstellungen,...), bevor Sie wählen, welche zu benutzen.
(FileID, Property)
ist einzigartig. Ich denke nicht, dass die null zählt in diesem Fall.Du nicht angeben, RDBMS, wenn Sie wissen, die Anzahl der Spalten zu transformieren, dann Sie können schwer-code die Werte:
Dies ist im Grunde eine
PIVOT
Funktion, einige RDBMS wird einePIVOT
, wenn Sie tun, dann können Sie die folgendenPIVOT
ist verfügbar in SQL Server, Oracle:Wenn Sie eine unbekannte Anzahl von Spalten zu transformieren, dann können Sie eine dynamische
PIVOT
. Dies ruft eine Liste der Spalten, um die Transformation zur Laufzeit:join
kam in der Nähemax(case...)
war mit index auf (FileID, Eigentum) und auch dann hat es nicht gewinnen. 3M Datensätze, unterschiedliche Indizierung.PIVOT
ich persönlich denke, es ist einfacher als Codierung für jedesCASE
- Anweisung. 🙂LEFT
schließt es nichtJOIN
.