(SQL) Order by abs() bei einem Union
seppel
- datenbank
Moin,
ich setze eine Abfrage gegen eine Sybase-Datenbank ab - hier eine verkürzte Darstellung des SQL-Statements mit der relevanten Spalte:
select Id, Datum, Buchung
from Tabelle
union
select Id2, Datum2, Buchung2
from Tabelle2
order by 2, 3
Die Spalten der zweiten Tabelle haben trotz gleichem Inhalt (Datentyp) teilweise andere Namen - deswegen der Order by mit Nummern. Das funktioniert auch ohne Probleme.
Ich müsste jetzt nur den |Betrag| der Buchung sortieren, da hier immer ein Kauf und ein Verkauf zusammen dargestellt werden sollen. D.h. ich würder gerne wie folgt sortieren:
...
order by 2, abs(3), 3
hier bekomme ich allerdings die Error-Meldung: "Order-by items must appear in the select-list". Ohne die Funktion läufts UND wenn ich nur eine der beiden Tabellen selektiere, funktioniert die abs() Funktion auch ohne Probleme.
Jemand ne Idee?
Vielen Dank schon mal.
Seppel
hi noch mal,
die Frage warum das oben gezeigte nicht geht bleibt zwar bestehen - aber ich hab mir jetzt schon wie folgt eine Lösung gebastelt
select Id, Datum, Buchung, abs(Buchung)
from Tabelle
union
select Id2, Datum2, Buchung2, abs(Buchung2)
from Tabelle2
order by 2, 4, 3
Gruss,
Seppel
Hello,
Die Spalten der zweiten Tabelle haben trotz gleichem Inhalt (Datentyp) teilweise andere Namen - deswegen der Order by mit Nummern. Das funktioniert auch ohne Probleme.
dann ändere dies. Benenne während der Selektion die Spalte nach deinen Wünschen um:
SELECT spalte AS neuername, ...
...
ORDER BY abs(neuername)
MfG
Rouven
Hi,
SELECT spalte AS neuername, ...
...
ORDER BY abs(neuername)
stimmt, das gabs ja auch noch ;) Ist auch ne gute Idee.
Danke und Gruss,
Seppel
yo,
Die Spalten der zweiten Tabelle haben trotz gleichem Inhalt (Datentyp) teilweise andere Namen - deswegen der Order by mit Nummern. Das funktioniert auch ohne Probleme.
du kannst, musst aber keine nummern einsetzen, was es immer ein wenig übersichtlicher macht, wonach den nun sortiert wird. bei UNION Operatoren sollte das dbms die namen der ersten abfrage nehmen und für alle anderen zuteilen. somit lassen sich spalten immer noch über den namen zum beispiel in der ORDER BY Klausel ansprechen.
um bei deinem beispiel zu blieben:
order by Datum, abs(Buchung), Buchung
Ilja