Announcement

Collapse
No announcement yet.

Abfrage optimieren?

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

  • #16
    ok, vielen Dank Euch allen.
    Ich habe soeben gehört, das ich die Auswertungen in der Form nicht mehr machen muss.
    Trotzdem bin an der Zusammenfassung mehrer Update-Statement interessiert.
    Deshalb habe ich das DECODE-Beispiel mal "im kleinen" ausprobiert. Hier mal das Original Statement:

    Code:
    UPDATE TAB1 set (pzn1,faktor1,brutto1,rabatt11,pzn2,faktor2,brutto2,rabatt21)=
    ( 
     SELECT DECODE(lfdnr,1,TAB2.pzn,TAB1.pzn1)
    , DECODE(lfdnr,1,TAB2.mengenfaktorTAB1.faktor1)
    , DECODE(lfdnr,1,TAB2.round(gesamtpreis*100,0),TAB1.brutto1)
    , DECODE(lfdnr,1,TAB2.round((apothekenrabatt+sonstige_rabatte+r004+r005+r006)*100,0),TAB1.rabatt11)
    , DECODE(lfdnr,2,TAB2.pzn,TAB1.pzn2)
    , DECODE(lfdnr,2,TAB2.mengenfaktorTAB1.faktor2)
    , DECODE(lfdnr,2,TAB2.round(gesamtpreis*100,0),TAB1.brutto2)
    , DECODE(lfdnr,2,TAB2.round((apothekenrabatt+sonstige_rabatte+r004+r005+r006)*100,0),TAB1.rabatt21)
    FROM TAB2
    WHERE TAB1.id=TAB2.id
    )
    Folgende Fehlermeldung kommt:
    ORA-00904: "TAB2"."ROUND": ungultiger Bezeichner

    Wenn ich das Round mal wegnehme (könnte man ja auch später machen) kommt folgende Meldung:
    ORA-01427: Unterabfrage fur eine Zeile liefert mehr als eine Zeile

    Gibt hier evtl. noch eine Lösung für?

    Comment


    • #17
      , DECODE(lfdnr,1,TAB2.round(gesamtpreis*100,0),TAB1.brutto1)
      =>
      , DECODE(lfdnr,1,round(TAB2.gesamtpreis*100,0),TAB1.brutto1)

      ORA-01427: Das habe ich oben schon mal angesprochen. Für die ID in TAB1 gibt es mehr als eine ID in TAB2. Nun musst du eine Möglichkeit finden die Eindeutigkeit in TAB2 zu finden. Wenn es egal ist, welchen Satz du nimmst, geht es mit " AND ROWNUM = 1 " im Select.

      Comment

      Working...
      X