Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Pivotieren einer Tabelle in SQL (z. B. Kreuztabelle / Kreuztabelle)

Bill Karwin erwähnt dies, aber ich denke, das verdient es, sehr deutlich darauf hingewiesen zu werden:

SQL tut nicht das, wonach Sie fragen, daher wird jede "Lösung", die Sie erhalten, ein Pfusch sein.

Wenn Sie wissen , sicher, es wird immer auf einem Oracle 10 laufen, dann könnte es Walter Mittys Kreuztabelle tun. Der richtige Weg, dies zu tun, besteht darin, die einfachste Kombination aus Sortierreihenfolge in der Abfrage und dem Anwendungscode zu verwenden, um sie richtig anzuordnen.

  • Es funktioniert auf anderen Datenbanksystemen
  • es riskiert nicht, dass andere Schichten scheißen (ich erinnere mich, dass MySQL zum Beispiel ein Problem mit>255 Spalten hatte. Sind Sie sicher, dass Sie Schnittstellenbibliothek haben kommt so gut zurecht wie die db selbst?)
  • es ist (normalerweise) nicht viel schwieriger.

Bei Bedarf können Sie einfach nach der Content_Row_ID fragen s zuerst und fragen Sie dann nach den Zeilen, die Sie benötigen, geordnet nach CampaignID , ContentRowID , wodurch Sie jede (ausgefüllte) Zelle in einer Zeile-für-Zeile-Reihenfolge von links nach rechts erhalten würden.

Ps.

Es gibt eine Menge Dinge, von denen der moderne Mensch denkt, dass SQL sie haben/tun sollte, die einfach nicht da sind. Dies ist eine, generierte Bereiche sind eine andere, rekursive Schließung, parametrisches ORDER BY , standardisierte Programmiersprache... die Liste geht weiter. (obwohl es zugegebenermaßen einen Trick für ORDER BY gibt )