seppel: (SQL) Order by abs() bei einem Union

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

  1. 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

  2. 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

    --
    -------------------
    There's no such thing as a free lunch  --  Milton Friedman
    1. Hi,

      SELECT spalte AS neuername, ...
      ...
      ORDER BY abs(neuername)

      stimmt, das gabs ja auch noch ;) Ist auch ne gute Idee.

      Danke und Gruss,
      Seppel

  3. 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