Willkommen bei Entwickler-Forum.
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 16
  1. #1
    Stammgast
    Registriert seit
    31.10.2007
    Beiträge
    176

    Standard Datensätze gruppieren und aus der Gruppe den niedrigsten Wert?

    Hallo zusammen,

    Ich habe eine Tabelle mit Artikelpreisen. Jeder Artikel kann mit der selben Artikelnummer und verschiedenen Preisen mehrfach
    in der Tabelle vorkommen, z.B. weil es zu einem Artikel mehrere Lieferanten mit unterschiedlichen Preisen gibt. Dabei kann es auch vorkommen
    das die Preise als Nettopreise oder als Preis - Rabatt eingetragen sind.

    Code:
    
    Art.-Nr.     LetzterEK      Rabatt
    10020         25,00          30
    10020         15,00           0
    10020         35,00          40
    10444          5,44           0
    10444         10,65          50
    
    
    Wie kann ich folgende Abfrage anpassen damit immer der kleinste Preis gefunden wenn es
    mehrere Preise für einen Artkel gibt?

    PHP-Code:
    select 
    artikelnummer
    ,
    case 
    when Rabatt 0 then LetzterEK - ((LetzterEK Rabatt) / 100) ELSE LetzterEK end as ekpreis
    from ARTLIEF 
    Geht das in einer Abfrage?

    Gruß

  2. #2
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.231

    Standard

    http://www.w3schools.com/sql/sql_func_min.asp
    und über die Artikelnummer gruppieren
    Christian

  3. #3
    Stammgast
    Registriert seit
    31.10.2007
    Beiträge
    176

    Standard

    Danke für die schnelle Antwort,

    das hab ich so schon geschafft und funktioniert auch

    select min(LetzterEK), Artikelnummer from ARTLIEF group by Artikelnummer

    Aber wie berechne ich jetzt die Preise die einen Rabatt haben? So findet er zwar den niedrigsten Preis aus den gruppierten Artikelnummern,
    aber wie kann ich den Rabatt berücksichtigen wenn er vom LetzterEK noch abgezogen werden muss??

    Probiert habe ich das, funktioniert aber nicht:

    select min(case when Rabatt > 0 then LetzterEK - ((LetzterEK * Rabatt) / 100) ELSE LetzterEK end as ekpreis), Artikelnummer from ARTLIEF group by Artikelnummer

  4. #4
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.231

    Standard

    Geht
    select min(LetzterEK -((LetzterEK * Rabatt) / 100)), Artikelnummer from ARTLIEF group by Artikelnummer
    Geändert von Christian Marquardt (19.09.2016 um 20:53 Uhr)
    Christian

  5. #5
    Stammgast
    Registriert seit
    31.10.2007
    Beiträge
    176

    Standard

    Die Abfrage bringt 0 weil ja ein Artikel keinen Rabatt sondern nur einen Nettopreis und im Feld Rabatt steht 0

    Auf die obige Beispieltabelle bezogen:

    select min((LetzterEK * Rabatt) / 100), Art.-Nr. from ARTLIEF where Art.-Nr. = '10020' group by Art.-Nr.

  6. #6
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.231

    Standard

    OK, dann musst du bis morgen warten.....habe keine DB zum testen hier....
    Christian

  7. #7
    Stammgast
    Registriert seit
    31.10.2007
    Beiträge
    176

    Standard

    Ich dachte so aber geht auch nicht :

    select
    Artikelnummer,
    case when Rabatt > 0 then min((LetzterEK * Rabatt) / 100)
    ELSE min(LetzterEK) end as PreisEK

    from ARTLIEF group by Artikelnummer

  8. #8
    Stammgast
    Registriert seit
    31.10.2007
    Beiträge
    176

    Standard

    Danke... kann bis morgen warten, rennt ja nicht weg

  9. #9
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.283

    Standard

    Zitat Zitat von Nevada208 Beitrag anzeigen
    select
    Artikelnummer,
    case when Rabatt > 0 then min((LetzterEK * Rabatt) / 100)
    ELSE min(LetzterEK) end as PreisEK
    from ARTLIEF group by Artikelnummer
    case when könnte man in Oracle so ersetzen:
    Code:
    min(LetzterEK * decode(nvl(Rabatt,0)0,1,Rabatt) )as PreisEK
    mit anderen Systemen die analogen Funktionen verwenden.
    Z.B. iif, case when usw.
    Gruß, defo

  10. #10
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.231

    Standard

    In Oracle sollte auch


    select ART_NR,
    min(
    case
    when Rabatt>0 then
    LetzterEK -((LetzterEK * Rabatt) / 100)
    else
    LetzterEK
    end) as preis
    from ARTLIEF group by ART_NR;

    funktionieren
    Christian

 

 
Seite 1 von 2 1 2 LetzteLetzte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •