Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

"Order by" unter Verwendung von "UNION"

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von MysterioJN, 21 Januar 2016.

  1. MysterioJN

    MysterioJN Datenbank-Guru

    Hallo zusammen. Ich hab ein Problem bei folgender Fragestellung:

    Tabelle mit gruppierten Artikelnummern (BstNr), deren Absatz und deren Umsatz.
    Absteigend nach Umsatz sortiert. Zudem soll noch eine Summenzeile am ENDE der Tabelle stehen. Das kann ich mit UNION lösen.

    Problem:
    - Setzte ich ein "order by tblMessen_Umsatz" in den ersten Select, kommt folgende Fehlermeldung:
    "Falsche Syntax in der Nähe des UNION-Schlüsselworts"
    - Setzte ich nun das order by ans Ende des UNION, steht die "Summenzeile" ganz oben, da größter Summenwert, was zwar logisch, aber in meinem Fall so nicht gewollt ist.

    Hier mal der bisherige Select (einfach ausgedrückt):

    SELECT
    tblMessen_BstNr AS BstNr,
    sum(tblMessen_Absatz)AS Absatz,
    sum(tblMessen_Umsatz)AS Umsatz

    FROM tblMessen
    Groupby tblMessen_BstNr

    UNION

    SELECT
    'Gesamt:',
    sum(tblMessen_Absatz),
    sum(tblMessen_Umsatz)

    FROM tblMessen



    Vlt. kann mir hier ja jemand weiterhelfen. Ich will ungern eine "Hilfsspalte" anlegen lassen, wo im ersten Select der Wert = 1 und im Union-Select der Wert = 2 ist, um diesen dann zu sortieren. Bis dato habe ich das, aber die Mitarbeiter fragen zu Recht, was die Spalte bedeutet *räusper*

    Beste Grüße
    Marco
     
    Zuletzt bearbeitet: 21 Januar 2016
  2. akretschmer

    akretschmer Datenbank-Guru

    Prinzipiell geht das so:

    Code:
    test=*# with x as (select random() r from generate_series(1,5) s) (select '' "Summe" , * from x order by r) union all select 'Summe:', sum(r) from x;
     Summe  |  r
    --------+-------------------
      | 0.165638133417815
      | 0.242920846678317
      | 0.273120970930904
      | 0.555021341890097
      | 0.721846274100244
     Summe: |  1.95854756701738
    (6 rows)
    

    Mit 'Hilfsspalte' ;-)
     
  3. ukulele

    ukulele Datenbank-Guru

    Also prinzipiell hat aktretschmer Recht du solltest einfach eine Hilfsspalte nutzen.
    Code:
    SELECT    *
    FROM    (
    
    SELECT
    0 AS asdf,
    tblMessen_BstNr AS BstNr,
    sum(tblMessen_Absatz)AS Absatz,
    sum(tblMessen_Umsatz)AS Umsatz
    
    FROM tblMessen
    GROUP BY tblMessen_BstNr
    
    UNION
    
    SELECT
    1 AS asdf,
    'Gesamt:',
    sum(tblMessen_Absatz),
    sum(tblMessen_Umsatz)
    
    FROM tblMessen
    
            ) t
    ORDER BY t.asdf,t.BstNr
     
  4. MysterioJN

    MysterioJN Datenbank-Guru

    Dank euch, dann muss ich es wohl doch mit Hilfsspalte machen, die man dann leider im Ergebnis sieht :-(
     
  5. ukulele

    ukulele Datenbank-Guru

    Du arbeitest ja normalerweise nicht mit SELECT * sondern definierst, welche Spalten angezeigt werden sollen. Da läßt du die Sortier-Spalte einfach weg, sortieren kannst du aber auch nach Spalten die nicht ausgegeben werden.
     
  6. MysterioJN

    MysterioJN Datenbank-Guru

    Hmm Naja aber wir müssen die doch im Select aufführen, da sie sie ja temporär generiert werden muss, um im Anschluss zu sortieren.

    SELECT
    0 AS asdf,
    tblMessen_BstNr AS BstNr,
    sum(tblMessen_Absatz)AS Absatz,...

    Oder versteh Ich jetzt was falsch?

    Edit: ach Moment, jetzt hab ich euren Ansatz erst verstanden. Ihr habt einen Unterselect gebaut und dort definiert. Mhm in meinem hab Ich alles im hauptselect und daher muss(te)ich es aufführen.... Vlt sollte Ich das dann doch noch mal nach eurer Vorgabe umbauen.

    Ob Ich die Verschachtelungen jemals verstehen werde :-/

    Was bedeutet das "t" am Ende?
     
  7. ukulele

    ukulele Datenbank-Guru

    In meinem Beispiel von Oben wäre das
    Code:
    SELECT    t.BestNr,
            t.Absatz,
            t.Umsatz
    FROM    (
    
    SELECT
    0 AS asdf,
    tblMessen_BstNr AS BstNr,
    sum(tblMessen_Absatz)AS Absatz,
    sum(tblMessen_Umsatz)AS Umsatz
    
    FROM tblMessen
    GROUP BY tblMessen_BstNr
    
    UNION
    
    SELECT
    1 AS asdf,
    'Gesamt:',
    sum(tblMessen_Absatz),
    sum(tblMessen_Umsatz)
    
    FROM tblMessen
    
            ) t
    ORDER BY t.asdf,t.BstNr
     
  8. MysterioJN

    MysterioJN Datenbank-Guru

    Guten Morgen! Hab es heute umbauen können. Top!! Es klappt und funktioniert einwandfrei. Herzlichsten Dank !!! Wünsche noch einen angenehmen Wochenstart.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden