SELECT-Abfrage: Keine doppelten Werte-Paare

maxxde

Neuer Benutzer
Beiträge
3
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
 
Werbung:
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)
 
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.
 
Werbung:
Zurück
Oben