Pati: Summe aus verschachtelten IFs stimmt nicht (sql)

Hallo nochmal,

im Nachgang zu diesem Post muß ich nochmal nachhaken. Ich habe folgende Tabelle

PA 	PM 	    Preis 	PMA 	PreisA 	 AWS 	                    SoW 
---------------------------------------------------------------------------------
A       0.92 	    8.70 	11.00 	8.00 	 0.91666666666667000000      A
A 	3.00 	    42.00 	11.00 	0.00 	 36.00000000000000000000     S

Nun möchte ich den kummulierten Gesamtpreis errechnen und zwar abhängig von der Spalte SoW. Wenn die auf "S" steht, soll PM*Preis gerechnet werden und wenn auf A, dann PMA*PreisA.

Meine Query hierzu lautet

SELECT 
sum(
IF (b.SoW = 'S',(CASE 
WHEN (b.PM = 0 AND b.PA = 'Z') THEN 0
WHEN (b.PM = 0 AND b.PA = 'K') THEN 0
WHEN b.PM = 0 THEN 1
ELSE
b.PM
END)
*Preis,(CASE 
WHEN (b.PM = 0 AND b.PA = 'Z') THEN 0
WHEN (b.PM = 0 AND b.PA = 'K') THEN 0
WHEN b.PM = 0 THEN 1
ELSE
b.AWS
END)
*PreisA) Gesamtsumme
)
FROM b_table b

Heraus kommt:

 Gesamtsumme 	
7.3333333333333600000000

Heraus sollte aber "214" kommen: Nämlich 11*88 + 3*42 = 214. Was mache ich falsch?

Pat

  1. Tach!

    Nun möchte ich den kummulierten Gesamtpreis errechnen und zwar abhängig von der Spalte SoW. Wenn die auf "S" steht, soll PM*Preis gerechnet werden und wenn auf A, dann PMA*PreisA.

    Wenn du mit PMA rechen möchtest, solltest du nicht AWS nehmen.

    Heraus sollte aber "214" kommen: Nämlich 11*88 + 3*42 = 214.

    Nach welcher Mathematik?

    dedlfix.

    1. Hi dedlfix,

      Wenn du mit PMA rechen möchtest, solltest du nicht AWS nehmen.

      OK, danke erstmal.

      Heraus sollte aber "214" kommen: Nämlich 11*88 +

      Nach welcher Mathematik?

      Nach der Summenformel? Natürlich nicht 11*88, sondern 11*8 + 3*42 = 214. Aber die Query, selbst mit Deinen Fehlerhinweisen spuckt immer noch nichts kummuliertes aus...

      SELECT 
      sum(
      IF (b.SoW = 'S',(CASE 
      WHEN (b.PM = 0 AND b.PA = 'Z') THEN 0
      WHEN (b.PM = 0 AND b.PA = 'K') THEN 0
      WHEN b.PM = 0 THEN 1
      ELSE
      b.PM
      END)
      *Preis,(CASE 
      WHEN (b.PM = 0 AND b.PA = 'Z') THEN 0
      WHEN (b.PM = 0 AND b.PA = 'K') THEN 0
      WHEN b.PM = 0 THEN 1
      ELSE
      b.PMA
      END)
      *PreisA)
      ) Gesamtsumme
      FROM b_table b
      ...
      

      ergibt 88. Aber nicht 214!?

      Sorry für die Flüchtigkeitsfehler, das passiert, wenn man vom testen schon Quark in der Birne hat... übrigens auch der "Pati-Name" anstelle von "Lukas". Ich bin auf einem anderen Rechner unterwegs, auf dem Pati gespeichert ist, weil ich zuletzt unter Lukas nicht posten konnte (warum auch immer wurde mir gesagt, der Name ginge nicht oder wäre schon vergeben).

      1. Hallo Pati,

        übrigens auch der "Pati-Name" anstelle von "Lukas". Ich bin auf einem anderen Rechner unterwegs, auf dem Pati gespeichert ist, weil ich zuletzt unter Lukas nicht posten konnte (warum auch immer wurde mir gesagt, der Name ginge nicht oder wäre schon vergeben).

        Registrier dich im Forum, dann hast du diese Sorge nicht.

        Bis demnächst
        Matthias

        --
        Rosen sind rot.
        1. Hi Matthias,

          Registrier dich im Forum, dann hast du diese Sorge nicht.

          Ich mag das eigentlich so, wie das ist. Ich wolt nur schnell aufklären, warum anderer Name.

      2. Tach!

        Aber die Query, selbst mit Deinen Fehlerhinweisen spuckt immer noch nichts kummuliertes aus...

        Bei mir tut es das aber.

        ergibt 88. Aber nicht 214!?

        Dann lass erstmal das SUM weg und schau dir die Zwischenergebnisse an.

        dedlfix.

        1. Hi dedlfix,

          Bei mir tut es das aber.

          Bidde? Wie kann das denn?

          ergibt 88. Aber nicht 214!?

          Dann lass erstmal das SUM weg und schau dir die Zwischenergebnisse an.

          Habe ich gerade gemacht. Ergibt 88 und 0.

          Also nimmt er die PMA*PreisA, aber den anderen Eintrag nicht.

          Korrektur: Bei mir macht die Query es auch korrekt, mir war ein Buchtabe abhanden gekommen.

          Ich lass das Problem dennoch mal als noch nciht gelöst hier stehen, weil ich noch ein bischen hin- und her testen muß, um zu sehen, ob alle Eventallitäten auch korrekt laufen.

          Bis hierher schonmal dankschön.

          1. Hallo,

            … mir war ein Buchtabe abhanden gekommen.

            😀

            Gruß
            Jürgen

            1. Hallo,

              … mir war ein Buchtabe abhanden gekommen.

              😀

              Mußte grad auch 2 x hinschauen 😉

          2. Tach!

            Bei mir tut es das aber.

            Bidde? Wie kann das denn?

            Das kann ich dir ganz genau sagen: Das liegt an der Ursache.

            Dann lass erstmal das SUM weg und schau dir die Zwischenergebnisse an.

            Habe ich gerade gemacht. Ergibt 88 und 0.

            Also nimmt er die PMA*PreisA, aber den anderen Eintrag nicht.

            Du möchtest bestimmte Werte selektieren und damit rechnen. Das Ergebnis stimmt aber nicht. Also sollte man nun schauen, wo die falschen Werte entstehen. Dafür kann man den Vorgang auf Einzelwerte herunterbrechen und schauen, ob man damit der Ursache näher kommt.

            Der nächste Schritt zurück wäre, die Einzelteile des Produkts anzuzeigen. Also quasi statt * mal ein , schreiben. Zur Not noch ein einzelnes * ins SELECT hinzufügen, um sämtliche Spalteninhalte ebenfalls angezeigt zu bekommen.

            dedlfix.

            1. Dann lass erstmal das SUM weg und schau dir die Zwischenergebnisse an.

              Der nächste Schritt zurück wäre, die Einzelteile des Produkts anzuzeigen. Also quasi statt * mal ein , schreiben. Zur Not noch ein einzelnes * ins SELECT hinzufügen, um sämtliche Spalteninhalte ebenfalls angezeigt zu bekommen.

              Sehr schöne Tips, danke @dedlfix.

      3. Hallo Pati,

        übrigens auch der "Pati-Name" anstelle von "Lukas". Ich bin auf einem anderen Rechner unterwegs, auf dem Pati gespeichert ist, weil ich zuletzt unter Lukas nicht posten konnte (warum auch immer wurde mir gesagt, der Name ginge nicht oder wäre schon vergeben).

        Es gibt einen User „Lukas“ seit 2006. Ich vermute mal, dass du sonst als „Lukas.“ gepostet hast?

        LG,
        CK

        1. Hi Christian,

          Es gibt einen User „Lukas“ seit 2006. Ich vermute mal, dass du sonst als „Lukas.“ gepostet hast?

          Korrekt und ja genau, ich habe sicher nicht an den Punkt gedacht, weil ich den Namen am anderen Rechner ja nicht jedesmal eingebe. Und so bekam ich natürlich an diesem Rechner mit dem Namen "Lukas" die korrekte Fehlermeldung, dass es bereits einen Lukas gibt. Ok, liegt also an mir, nicht am Forum. 😀

          Danke für die Info.

  2. Hello,

    ganz allgemein mache ich das in solchen Fällen so, dass ich mir zum Test Zwischenergebnisse als berechnete Spalten anzeigen lasse. Da kann ich dann besser kontrollieren, welcher Teil der bedingten Anweisung wohl gerade ausgeführt wurde.

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es
    Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
    1. Hello,

      ganz allgemein mache ich das in solchen Fällen so, dass ich mir zum Test Zwischenergebnisse als berechnete Spalten anzeigen lasse. Da kann ich dann besser kontrollieren, welcher Teil der bedingten Anweisung wohl gerade ausgeführt wurde.

      Hi Tom,

      wie hättest Du das kin diesem Fall gemacht? (weil genau nach sowas hatte ich gesucht. Dedlfix hat mir hierzu schon einen "Zeilentip" gegeben, indem ich das SUM weglassen sollte).