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

Berechnung innerhalb der SQL Abfrage

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von To-Di, 16 März 2015.

  1. To-Di

    To-Di Benutzer

    Hallo,
    ich müsste innerhalb meiner Abfrage:

    Select
    PCH1.ShipDate,
    PCH1.BaseRef,
    OITM.ItemCode,
    OITM.ItemName,
    PCH1.Price,
    PCH1.Currency,
    PCH1.Rate,
    OITM.CardCode,
    OCRD.CardName
    From
    OITM Inner Join
    PCH1 On OITM.ItemCode = PCH1.ItemCode Inner Join
    OCRD On OITM.CardCode = OCRD.CardCode
    Where
    OITM.CardCode = '70749'
    Order By
    OITM.ItemCode,
    PCH1.BaseRef

    den Wert aus PCH1.Price * PCH1.Rate errechnen.
    Mein Ansatz war:

    Select
    PCH1.Price,
    PCH1.Rate,
    Price*Rate AE Euro

    Bin absoluter SQL Neuling, also bitte nicht lachen...
     
  2. Distrilec

    Distrilec Datenbank-Guru

    Du warst schon auf der richtigen Spur...
    Wenn es einen Fehler gab, dann weil es die Spalten in mehreren deiner Tabellen/Views gab.
    Also immer richtig referenzieren... :)
    Code:
    Select t2.shipdate,
           t2.baseref,
           t1.itemcode,
           t1.itemname,
           t2.currency,
           t1.cardcode,
           t3.cardname
           t2.price as price_currency,
           t2.rate as currency_rate,
           round(t2.price * t2.rate, 6) as price
    From   oitm t1
    
    Inner  Join pch1 t2
    On     t1.itemcode = t2.itemcode
    
    Inner  Join ocrd t3
    On     t1.cardcode = t3.cardcode
    
    Where  t1.cardcode = '70749'
    
    Order  By t1.itemcode,
              t2.baseref
    
     
  3. To-Di

    To-Di Benutzer

    Hi Distrilec,
    danke für die schnelle Antwort! :)
    Ich bekomme allerdings in Zeile 8, Pos. 10:
    t2.price as price_currency,
    den Fehler "invalid sevelct statement"...:(
     
  4. Distrilec

    Distrilec Datenbank-Guru

    Ja... Bei t3.cardname fehlt ein Komma... Sry :)
     
  5. To-Di

    To-Di Benutzer

    Fantastisch, jetzt gehts :)
    Allerdings hätte ich dividieren, nicht multiplizieren müssen. Habe also "*" gengen "/" ausgetauscht.
    Einige Felder haben keinen, oder einen "0" Wert, so bekomme ich jetzt den Fehler "Divide by zero..."
    Bei Excel wüsste ich damit umzugehen ;)
     
  6. Distrilec

    Distrilec Datenbank-Guru

    Das dein Währungskurs eine 0 enthalten kann finde ich schon ziemlich fragwürdig...

    Aber da kann ich dir auch nur eine Lösung geben, wenn du mir sagst was bei NULL-Werten oder 0-Werten angezeigt werden soll :)
    Möchtest du dann einfach nur den Preise sehen? Oder nichts?
     
  7. To-Di

    To-Di Benutzer

    Danke Dir für Deine Hilfe!
    Der Währungskurs hatt immer dann einen o Wert, wenn es sich bereits um Euro handelt.
    In diesem Fall soll der Wert aus dem Feld Price übernommen werden. Ich gebe Dir natürlich Recht, dass SAP hier besser eine 1 als eine 0 reinschreiben sollte!

    Zusätzlich gibt es aber tatsächlich auch o Werte bei den Preisen - z.B. bei unberechneten Mustern etc.
    Es kann aber trotzdem einen Währungskurs geben (aus anderen Positionen des Belegs)
    Wenn das der Fall ist, soll 0 erscheinen (aber das dürfte nicht das Problemsein - oder?)
     
  8. Distrilec

    Distrilec Datenbank-Guru

    Also zum Verständnis...
    Wenn der Preis 0 ist, soll dort 0 erscheinen? -> Passiert schon... 0 / 20434232 ist auch 0 :)
    Aber was soll passieren wenn es andere Positionen mit einem Währungskurs gibt?
    Den zu Filtern könnte problematisch werden...
    1. Was wenn es verschiedene gibt
    2. Was wenn der Währungskurs einen anderen Zeitstempel hat? (Die Position ist neuer als die, die wir eigentlich umrechnen wollen / Ergo hat sich auch der Währungskurs in der Zeit geändert)
    (Was mir so on-the-fly dazu einfällt :) )

    Hier aber schonmal die Änderung für den Währungskurs
    Code:
    Select t2.shipdate,
           t2.baseref,
           t1.itemcode,
           t1.itemname,
           t2.currency,
           t1.cardcode,
           t3.cardname,
           t2.price As price_currency,
           t2.rate As currency_rate,
           Case
              When t2.rate Is Null Or
                   t2.rate = 0 Then
               t2.price
              Else
               round(t2.price / t2.rate, 6)
           End As price
    From   oitm t1
    
    Inner  Join pch1 t2
    On     t1.itemcode = t2.itemcode
    
    Inner  Join ocrd t3
    On     t1.cardcode = t3.cardcode
    
    Where  t1.cardcode = '70749'
    
    Order  By t1.itemcode,
              t2.baseref
     
  9. To-Di

    To-Di Benutzer

    super , vielen Dank!
    Mit winzigen Änderungen - die ich tatsächlich selber machen konnte ;-) - hab ich jetzt ganau das, was ich brauche - vielen Dank!
    sorry, hinsichtlich der Währungskurse und anderen Positionen hatte ich mich nicht klar ausgedrückt (der Sachverhalt ist allerdings auch nicht ganz einfach zu erklären)
    Nochmals vielen Dank für Deine Hilfe!!!;)
     
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