Announcement

Collapse
No announcement yet.

DECODE Anweisung: wo liegt das Problem?

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

  • DECODE Anweisung: wo liegt das Problem?

    Hallo,

    ich habe folgende SQL- Anweisung.
    Die DECODE Anweisung funktioniert nicht.
    Folgendes: Die erste DECODE Anweisung wird ausgeführt.
    Die anderen Felder, wo die zweite DECODE- Anweisung durchgeführt werden sollte, bleiben leer oder werden mit "0" gefüllt.
    Starte ich dieses SQL nur mit der zweiten DECODE- Anweisung (g_ccy.ccy_n_euritg = '0'), dann wird das Feld EURO mit "11" gefüllt.

    SELECT
    DECODE (g_ccy.ccy_n_euritg,'1',
    (SELECT i_sea.sea_m_bkgpos * g_ccy.ccy_n_eurcvrrat
    FROM g_ccy
    WHERE g_ccy.ccy_n_int = i_sec.ccy_n_int),
    '0',
    (SELECT i_sea.sea_m_bkgpos * g_ccyexr.ccy_n_spt
    FROM g_ccyexr, i_sea, i_sec, g_ccy
    WHERE g_ccyexr.ccy_n_int = i_sec.ccy_n_int
    AND g_ccyexr.ccy_d_dat = (SELECT datum from test
    WHERE g_ccyexr.ccy_n_int = test.ccy_n_int)
    AND g_ccyexr.ccy_n_int = i_sea.ccy_n_int
    AND i_sec.sec_n_int = sea.cus_n_int), '11') EURO
    AND i_sec.sec_n_int = i_sea.cus_n_int),11) EURO
    FROM [...]
    WHERE [...]

    Das Ganze habe ich auch schon mit der CASE- Funktion versucht, jedoch mit dem gleichen Resultat:

    SELECT I_SEA.name
    CASE WHEN
    g_ccy.ccy_n_euritg = '0'
    THEN
    (SELECT i_sea.sea_m_bkgpos * g_ccyexr.ccy_n_spt
    FROM g_ccyexr, i_sea, i_sec, g_ccy
    WHERE g_ccyexr.ccy_n_int = i_sec.ccy_n_int
    AND g_ccyexr.ccy_d_dat = (SELECT datum from test
    WHERE g_ccyexr.ccy_n_int = test.ccy_n_int)
    AND g_ccyexr.ccy_n_int = i_sea.ccy_n_int)
    ELSE
    (SELECT i_sea.sea_m_bkgpos * g_ccy.ccy_n_eurcvrrat
    FROM g_ccy
    WHERE g_ccy.ccy_n_int = i_sec.ccy_n_int)
    END EURO
    FROM [...]
    WHERE [...]

    Wer kann mir helfen?

    Bin für jeden Tip dankbar,
    Stephanie

  • #2
    Hallo Stephanie,

    beim 1. Select (mit DECODE) stimmen die Klammern nicht, da ist wohl beim reinkopieren irgendwas verloren gegangen. So laesst sich aber nicht feststellen, was falsch ist.
    Aber so prinzipiell: Ist g_ccy.ccy_n_euritg ein char(1) ? Sonst steht vielleicht gar nicht der erwartete Wert im Feld drin.
    Beim analysieren hilft auch oft, erst mal statt komplizierter Selects als Ausgabewert feste Werte anzugeben. (z.B. select decode(g_ccy.ccy_n_euritg,'1', 'das ist 1', '0','das ist 0', 'das ist der Rest') from ...

    Gruß
    Usch

    Comment

    Working...
    X