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

SELECT-Abfrage: Keine doppelten Werte-Paare

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von maxxde, 23 September 2016.

  1. maxxde

    maxxde Neuer Benutzer

    Hallo zusammen,

    ich stehe gerade vor einem kleinen Problem. Ich habe eine Tabelle mit den Spalten Händler, Geschäftspartner, Auftragsart und Betrag. Auftragsart ist entweder "Bestellung" oder "Lieferung".
    Nun benötige ich den Geschäftspartner, die Auftragsart sowie den Betrag, sortiert nach dem Betrag des Auftrags, also sowas wie:

    SELECT TOP 3 Geschäftspartner, Auftragsart, Betrag FROM Aufträge ORDER BY Betrag desc

    Die Abfrage erlaubt z.B.:
    XGmbH - Bestellung- 20000
    XGmbH - Bestellung- 10000
    XGmbH - Lieferung - 9000

    Allerdings soll hierbei das Paar "Geschäftspartner - Auftragsart" nicht doppelt vorkommen. Also das zweite Ergebnis sollte hierbei nicht erscheinen.

    Ich hoffe, ihr könnt mir hierbei helfen :)

    Liebe Grüße
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Geht das?

    Code:
    test=*# select * from maxxee ;
     partner |  art  | betrag
    ---------+------------+--------
     xgmbh  | bestellung |  20000
     xgmbh  | bestellung |  10000
     xgmbh  | lieferung  |  9000
    (3 Zeilen)
    
    test=*# select distinct on (partner, art) partner, art, betrag from maxxee order by partner, art, betrag desc;
     partner |  art  | betrag
    ---------+------------+--------
     xgmbh  | bestellung |  20000
     xgmbh  | lieferung  |  9000
    (2 Zeilen)
    
    Kann sein, daß es nicht geht, das ist eine PG-Erweiterung.

    Das sollte aber gehen:

    Code:
    test=*# select partner, art, betrag from (select partner, art, betrag, row_number() over(partition by partner, art order by betrag desc) from maxxee) foo where row_number = 1;;
     partner |  art  | betrag
    ---------+------------+--------
     xgmbh  | bestellung |  20000
     xgmbh  | lieferung  |  9000
    (2 Zeilen)
    
     
  3. maxxde

    maxxde Neuer Benutzer

    Hey,

    vielen Dank für deine Hilfe :).

    Die Abfrage funktioniert. Doppelte Rechnungsarten pro Partner kommen schon mal nicht vor, das ist sehr gut. Allerdings ist das Ergebnis noch nicht ganz das was ich mir vorgestellt habe.

    Wahrscheinlich hab ich das Problem falsch beschrieben.
    Ich habe z.B. drei Testunternehmen angelegt. Mit der Abfrage bekomme ich dann folgendes Ergebnis, also jeweils die höchsten Beträge pro Geschäftspartner und Auftragsart (bei zgmbh gibt es keine Bestellungen).

    xgmbh Bestellung 21000
    xgmbh Lieferung 11000
    ygmbh Bestellung 15000
    ygmbh Lieferung 9000
    zgmbh Lieferung 30000

    Was ich brauche wäre in diesem Fall z.B. folgendes Ergebnis:
    zgmbh Lieferung 30000
    xgmbh Bestellung 21000
    ygmbh Bestellung 15000

    Also es sollte quasi zuerst nach dem Betrag sortiert werden, und für den Fall, dass es für einen Geschäftspartner schon die gleiche Auftragsart gibt, wenn dieses Paar in der Ergebnistabelle also doppelt vorkommen würden, sollte es mit dem nächst größeren Betrag gehen usw. bis die drei höchsten gefunden sind.

    Ich hoffe, dass ich mein Problem diesmal besser beschreiben konnte.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Dann ändere den Part in "partition by partner, art" und schreibe da nur rein, was relevant ist. Du schaffst das ...
     
  5. maxxde

    maxxde Neuer Benutzer

    Sorry ich bin noch ganz neu was SQL angeht aber stimmt, darauf kann ich auch selbst kommen :)
    Danke nochmal :)
     
    akretschmer gefällt das.
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