Hi.
Kann man eine SQL-Abfrage so gestalten, dass bestimmte Spalten, die Werte enthalten, zwar zum sortieren (SORT BY) benutzt werden, in der Anzeige/Ausgabe diese Werte jedoch unterdrückt werden? So etwas wie „hidden value“?
Danke!
M.
Hi.
Kann man eine SQL-Abfrage so gestalten, dass bestimmte Spalten, die Werte enthalten, zwar zum sortieren (SORT BY) benutzt werden, in der Anzeige/Ausgabe diese Werte jedoch unterdrückt werden? So etwas wie „hidden value“?
Danke!
M.
Hintergrund ist:
Ich habe zwei SQL-Teile, die mit UNION verbunden werden.
Der 1. Teil liefert beispielsweise
Sp1 Sp2 Sp3 Sp4 Sp5 Sp6
A1 A2 A3 A4 A5 A6
B1 B2 B3 B4 B5 B6
Der 2. Teil liefert
Sp1 Sp2 Sp3 Sp4 Sp5 Sp6
A1 A2 A3 AX AX AX
B1 B2 B3 BX BX BX
Nun brauche ich nach dem UNION dieser Teile eine Sortierung (SORT BY Sp1, Sp2),
wobei dann aber die ‚doppelten Werte‘, die jedoch zum Sortieren benutzt werden (u.a. Sp1 und Sp2) unterdrückt werden sollen:
Sp1 Sp2 Sp3 Sp4 Sp5 Sp6
A1 A2 A3 A4 A5 A6
AX AX AX
B1 B2 B3 B4 B5 B6
BX BX BX
(Es ist bekannt, welche Spalten die ‚doppelten Werte‘ enthalten, also immer Sp1, Sp2, Sp3)
Die
hat mit der
doch gar nichts zu tun.
Oder geht es gar nicht um Programmierung?
Mit „Anzeige/Ausgabe“ ist das SQL-Ergebnis gemeint.
BTW: Es ist ferner bekannt, dass alle SQL-Teile, die nach dem 1. SQL kommen diese ‚doppelten Werte‘ haben. D.h. man könnte in diesen einzelnen SQL-Teilen (außer dem 1. Teil) die entsprechenden Spalten leeren, da es ja bekannt ist. Andererseits brauche ich diese Werte, um sie nach dem UNION zu sortieren. Dilemma!
Hast du es mit einer geschachtelten SELECT-Anweiung versucht, also in etwa so:
SELECT a, b from SELECT col1 as a, col2 as b, col3 from tab SORT BY col3
Ich brauche ja auch col3. Nur eben nicht durchgängig von allen UNION-Teilen.
Sorry, hatte deinen zweiten Beitrag nicht gelesen. Ich halte das für keine gute Idee, denn tatsächlich sind die Werte ja nicht leer sondern identisch mit dem Wert in der vorherigen Zeile. Das ist eigentlich Sache des Anzeigeprogramms.
SELECT a, b, c FROM (UNION ...) ORDER BY d
Ist allerdings nicht besonders performant.
Naja, kommt darauf an, was man mit „Anzeigeprogramm“ meint - bei Oracle nennt man das „analytische Funktionen“, egal, welches „Anzeigeprogramm“ man benutzt.
Zum Grundproblem: Lege ein Select „über“ die Union-Abfrage:
select ... from (select from ... union select from ... order by ...)
Grundsätzlich muss ein Sortierungsfeld in der Select-Liste nicht vorkommen - ist aber leider von DB-System zu DB-System verschieden.
Grüße,
Tomh
Der Kern der Frage ist, wie man erreichen kann, dass ein Wert, der identisch mit dem Wert derselben Spalte in der vorhergehenden Zeile ist, durch eine leere Zeichenkette, NULL oder anderes ersetzt wird. Darauf bezog sich meine Antwort.
Meine auch, da gibt es eben beispielsweise unter Oracle einiges an analytischen group-by-Funktionalitäten.
(Obwohl ich zugeben muss, dass das eher Zufall war, denn ich habe nur das Sort-Problem gelesen … ja ich weiß, man sollte alles lesen …)
Aber ohne RDBMS ist es Glaskugelraten.
Grüße,
Tomh