[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Nov 2006
    Beiträge
    60

    SQL CASE Anweisung

    Hallo zusammen,

    ich habe folgendes Problem bei einer SQL Case Anweisung.
    Ich habe eine Datei die aus einem CHAR Feld besteht, in diesem einem Feld ist eine Summe für mich entscheidend die ich ohne Problem mit einem Substr ansprechen kann.
    Mein Problem ist das ich allerdings mit einer CASE Anweisung entscheiden muss ob es sich um einen Positiven oder negativen Wert handel und in dem Moment behandelt die CASE Anweisung mein CHAR Feld als NUMERIC Feld, was auch nicht weiter schlimm wäre wenn ich die dezimal werte mit angezeigt bekomme.

    Frage kann mir jemand helfen wie ein SQL aussehen muss damit ich meinen vollständigen Wert in einer CASE Anweisung angezeigt bekomme

    so lautet mein SQL....
    Code:
    SELECT substr((wert.feld), 57, 9) as Summe , case when              
    substr((wert.feld), 57, 1) = '-' then substr((wert.feld), 57, 9 )   
    else 0 end as Negativ_Summe, case when substr((wert.feld), 57, 1)   
    <> '-' then substr((wert.feld), 57, 9 ) else 0 end as Positiv_Summe 
    FROM wert
    und so ist das Ergebnis
    Code:
    SUMME      NEGATIV_SUMME   POSITIV_SUMME
    000020,46              0              20
    -00214,38            214-              0
    000056,78              0              56
    -00163,22            163-              0
    000524,28              0             524
    000456,43              0             456
    -00013,98             13-              0
    -00117,20            117-              0
    -00076,10             76-              0
    -00048,03             48-              0
    -00048,21             48-              0
    -00001,06              1-              0

    Vielen Dank im Voraus

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    So ganz verstehe ich die Frage nicht.
    Du kannst ein CHAR-Feld auch mit dec(..) casten, wenn garantiert immer ein numerischer Wert enthalten ist:

    dec(substr(...), 9, 0)

    ggf. vorher auch trimmen:

    dec(trim(substr(...)), 9, 0)
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Versuch's mal so:

    Code:
    With x as (select Cast(substr(feld, 57, 9) as Dec(9, 2)) Fld, a.* 
                 from Wert a)
    Select Fld Summe, 
          Case When Fld < 0 then Fld else 0 end as Negativ_Summe,
          Case When Fld >= 0 Then Fld Else 0 End as Positiv_Summe
    From x;
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  4. #4
    Registriert seit
    Nov 2006
    Beiträge
    60
    Vielen Dank für die Hilfe, funktioniert beides wunderbar

    Gruß
    Bobou

Similar Threads

  1. dynamisches Group by funktioniert nicht
    By Tobse77 in forum NEWSboard Programmierung
    Antworten: 12
    Letzter Beitrag: 24-09-09, 08:31
  2. SQL Case von mehreren Dateien
    By steven_r in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 08-08-06, 09:34
  3. Cobol-Programm mit Embedded SQL (SELECT CASE)
    By klausgkv in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 08-06-06, 13:47
  4. Hilfestellung bei AS/400 SQL Anweisung
    By Luisfree in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 19-01-05, 17:42
  5. Optimierung SQL Anweisung
    By Cassius in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 05-03-02, 19:28

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •