Announcement

Collapse
No announcement yet.

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

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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
    http://www.w3schools.com/sql/sql_func_min.asp
    und über die Artikelnummer gruppieren
    Christian

    Comment


    • #3
      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

      Comment


      • #4
        Geht
        select min(LetzterEK -((LetzterEK * Rabatt) / 100)), Artikelnummer from ARTLIEF group by Artikelnummer
        Zuletzt editiert von Christian Marquardt; 19.09.2016, 19:53.
        Christian

        Comment


        • #5
          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.

          Comment


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

            Comment


            • #7
              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

              Comment


              • #8
                Danke... kann bis morgen warten, rennt ja nicht weg

                Comment


                • #9
                  Originally posted by Nevada208 View Post
                  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

                  Comment


                  • #10
                    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

                    Comment


                    • #11
                      Es ist eine MSSQL Datenbank....

                      Comment


                      • #12
                        Und probiert?

                        Es sollte da analog funktionieren. Das "if" in die min-Funktion
                        Christian

                        Comment


                        • #13
                          Bin nicht am Rechner. .. mache ich Abend

                          Comment


                          • #14
                            Hallo Cristian....

                            diese Lösung hat funktioniert:

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

                            Danke für Deine Hilfe

                            Comment


                            • #15
                              schön, dass es geht
                              Christian

                              Comment

                              Working...
                              X