[NEWSboard IBMi Forum]

Thema: sql problem

Hybrid View

  1. #1
    Registriert seit
    Nov 2007
    Beiträge
    371
    danke erstmal für die antwort. ich werde es am montag mal ausprobieren ob es klappt. vielen dank erstmal

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Alles viel einfacher:

    select ...
    case
    when anskunde = 'X' then
    a.feld1
    else
    b.feld1
    end as feld1
    ,
    case
    when anskunde = 'X' then
    a.feld2
    else
    b.feld2
    end as feld2
    :
    :
    from myfile
    left join filea a on ...
    left join fileb b on ...
    where ...

    Für jedes Feld ist eine Case-Ausdruck erforderlich.
    Durch den "left join" ist sichergestellt, dass aus MyFile alle und aus FileA und FileB die vorhandenen Sätze gewählt werden.

    Ggf. kann per "coalesce(f.feldx, ' ')" ein NULL-Wert ausgeschlossen werden.

    Union ist nicht unbedingt die ideale Lösung.
    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
    Nov 2007
    Beiträge
    371
    Hallo,

    also zuerst einmal Danke an alle.
    Ich habe mich für die Version von Herrn Fuerchau entschieden.


    Mein Select

    select cast(substr(digits(A.DATUM), 5, 2) as numeric) as jahr ,
    cast(substr(digits(a.datum) , 3, 2) as numeric) as monat,
    cast(substr(digits(a.datum) , 1, 2) as numeric) as tag,
    a.rechnr, anskunde, kundennr,
    case when Anskunde = 'X'
    then
    substr(z.f00002 , 5, 10)
    else
    y.anschri2
    end as ort
    from Qs36f/DebiSudl as a
    left outer join qs36f/KDSTAMM as Z on kundennr = z.k00001
    left outer join qs36f/debisudt as Y on a.rechnr = y.rechnr
    and y.umerkmal = '3'

    so nun hätte ich noch zwei Fragen.

    Frage 1:
    Kann ich das Feld Ort das ich mir erzeuge durch ' end as ort ' irgendwie noch abfragen??
    z.B. where Ort Like '%berg%'

    In der where Klausel wenn ich es mit einbaue kommt immer die Fehlermeldung ' Feld nicht in Tabelle' .

    Frage 2:

    Das Feld A.Adatum ist ein 6 0 Feld in der Datei. Gefüllt mit ttmmjj.
    (Das ist echt eine Datenhaltung die wir hier haben das es der Sau graust )

    kann man das in ein echtes Datumsfeld umwandeln ??
    Mit Date oder??
    Aber dazu müsste ich dann beim Jahr 1900 oder 2000 addieren .
    Dies kann ich wahrscheinlich wieder mit Case abfragen oder??


    Zur Erkärung. Der User soll die möglichkeit haben Datensätze per Datum einzuschränken. aber das Datum in der Datei ist wie immer bei uns kein Datumsfeld .




    Danke nochmal.........

  4. #4
    Registriert seit
    Nov 2007
    Beiträge
    371
    ok dass das Datum jetzt zumindest
    6-stellig richtig kommt hab ich es so gemacht

    char(
    substr(digits(A.DATUM), 5, 2) concat
    substr(digits(a.datum) , 3, 2) concat
    substr(digits(a.datum) , 1, 2) ) as neu,



  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Natürlich kannst du alles mit case abfragen.

    Um ein Datum zu erstellen, musst du ein Datumsformat übergeben, am besten eben ISO 'JJJJ-MM-TT'.

    z.B.:
    date(
    case when substr(digits(mydate), 5, 6)) < '70' then '20' else '19' end
    concat '-' concat substr(digits(mydate, 3, 2)) concat '-' concat substr(digits(mydate), 1, 2)))

    Mit Where-Bedingung wirds etwas kompliziert, da Ergebnisfelder zu diesem Zeitpunkt noch nicht exisitieren, der gesamte case-Ausdruck ist in diesem Fall also komplett zu wiederholen und dann auch abfragbar:

    where ... and case ... end = Wert

    Werden aber Felder aus Leftjoin abgefragt, macht man daraus schnell Innerjoin's, da man auch "is null" benötigt.

    where (leftjoinfiled is null or leftjoinfield = Wert) ...

    alternativ

    where coalesce(leftjoinfield, Defaultwert) = Wert

    Kombiniere dies dann nun auch noch mit case und die Übersichtlichkeit verbessert sich nicht gerade.

    Am einfachsten wirds dann aber mit CTE's:

    with
    mySelect as (fullselect)
    select * from mySelect
    where ErgField=Wert

    Durch "as (fullselect)" exisitieren nun die Ergebnisfelder.
    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

  6. #6
    Registriert seit
    Nov 2007
    Beiträge
    371
    Sorry aber das muß ich jetzt los werden du bist mein Held .

    Funktioniert super.

    Das mit dem with as ist der Bringer.


    Ausserdem hab ich durch diesen ganzen Sums hier noch gelernt das man keine Sichten auf Programmbeschriebene Dateien machen kann.
    Hoffe diese Aussage stimmt.

    Vielen vielen dank nochmal!!!

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Nun ja, auch das ist nur bedingt richtig.
    Solange die interne Datei keine gepackten Felder enthält ist das releativ einfach:

    select substr(satzfeld, 1, 10) as feld1, dec(substr(satzfeld, 11, 5), 5, 0) as numfeld ...
    from myfile

    Sind Zoned-Felder mit Vorzeichen darin, so kann man mittels case das Vorzeichen ja abfragen:

    dec(substr(satzfeld, pos, len-1) concat substr(hex(substr(satzfeld, pos+len-1, 1)), 2, 1), len, 0)
    *
    case substr(hex(substr(satzfeld, pos+len-1)), 1, 1)
    when 'D' then -1
    else 1 end)

    Für gepackte Felder:
    dec(substr(hex(substr(satzfed, pos, len), 1, len*2-1))
    *
    case substr(hex(substr(satzfeld, pos+len-1)), 2, 1)
    when 'D' then -1
    else 1 end)

    Benötigst du z.B. 2 Nachkomma, so musst du nur
    dec(....) / 100
    anhängen.

    usw. usw.
    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

  8. #8
    Registriert seit
    Nov 2007
    Beiträge
    371
    also als ich die Sicht erstellen wollte kommt immer die Fehlermeldung 7 .
    Bei der Datei handelt es sich um eine Programmbeschreibene Datei.

    Ich hab die Datei mittels leftjoin und 5-stelliges AlphaFeld verbunden.

    Nun lese ich einen String der 700 stellen lang ist und in dem alles enthalten ist (gepackte,gezonte,usw) einen Alphastring aus.

    Verstehe ich das Richtig .

    Wenn auch nur 1 gepacktes Zeichen in diesem String vorkommt muß ich die letzte Variante deiners Vorschlages nehmen.

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Das ist korrekt.
    Create VIEW funktioniert ggf. tatsächlich nicht, SQL aber ja.
    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

  10. #10
    Registriert seit
    Nov 2007
    Beiträge
    371
    Jetzt bin ich verwirrt.

    Also hatte ich doch recht das der Create View verwehrt bleibt oder??

    Da hilft mir auch nix wenn die SQL-Syntax (Also die Umwandlung der Werte )korrekt wäre.

  11. #11
    Registriert seit
    Nov 2007
    Beiträge
    371
    so nun noch eine Frage bevor ich ewig im dunklen tappe.

    Mein SQL Befehl

    insert into ....

    with fullselect as (

    .......
    .......
    .......
    .......
    .......
    )

    select from fullselect
    where ( soll flexibel sein)

    Also dieser ganze Sql Befehl soll abgesetzt werden wobei ich mir die where per Programm zusammenbauen muß.

    Jetzt meine Frage: Wie würdet ihr das wo
    und wie einbauen (Ich meine nicht die where bedingung ).

    Alles ins RPG schreiben oder was anderes??
    Teile davon auslagern?? Wenn ja wie??


    Mir würden ein Paar Tipps wie man das angeht wirklich weiterhelfen.
    Danke

Similar Threads

  1. problem mit eigener sql function
    By Stefan_Sk in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 26-05-06, 16:37
  2. SQL Problem
    By Lucky4712 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 24-05-06, 15:57
  3. Problem bei Abfrage bei Imbedded SQL
    By cbe in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 08-06-05, 16:21
  4. embedded SQL Performance Problem mit SCROLL
    By itec01 in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 16-09-04, 18:38
  5. Problem bei ILE COBOL mit sql connect to
    By rebe in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 07-09-01, 13:55

Berechtigungen

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