[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Oct 2015
    Beiträge
    109

    XML SQL - Tag nur zeigen wenn gefüllt

    Guten Abend zusammen,

    momentan versuche ich aus einer Tabelle per embedded SQL eine XML-Datei zu erzeugen.
    Das funktioniert bisher auch wunderbar, jedoch möchte ich nun vermeiden, dass Werte die mit 0 bzw ' ' gefüllt sind, angezeigt werden. Gibt es da ein Schlüsselwort?
    Habe es bereits mit CASE versucht, bekomme aber keine anständige Syntax zusammen.
    Meine XML erzeuge ich bisher ungefähr so:
    Code:
     exec sql select xmldocument(
                      xmlelement(NAME "Data",
                      xmlnamespaces(
                      'www.example.com/1' AS "xsi"),
                      xmlelement(NAME "Company", digits(max(COMPANY))),
                      xmlelement(NAME "Store", max(STORE)),
                      xmlelement(NAME  "Date", max(:val_dat_xml)),
                      xmlgroup(
                      trim(ID) as "Id",
                      COUNT as "Counted",
                      case when Substr(Trim(char(NUMBER)), 1, 1) = ','
                      then '0.00' else Trim(Replace(char(NUMBER), ',', '.')) end
                      as "Number",
                      order by ID asc
                      option row "TEST" root "TestList")))
                      into :myxml
                      from Data where  ID <> ' '
    Konkret möchte ich also nun "Counted" nur ausgeben, wenn COUNT > 0 ist.

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.238
    Das dürfte nicht gehen da du ja per Bedingung eine ganze Spalte weglassen willst.
    Aber wen stört es eigentlich?
    Das ist doch nur Schönheit.
    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
    Oct 2015
    Beiträge
    109
    Dankeschön für die Antwort!
    Ja, Ich fand das auch überflüssig,
    doch leider ist das die Anforderung.
    Im schlimmsten Fall muss ich wohl die XML nachträglich
    durchsuchen und entsprechende Stellen raus filtern.

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    So sollte es funktionieren:

    Code:
    exec sql select xmldocument(
                      xmlelement(NAME "Data",
                      xmlnamespaces(
                      'www.example.com/1' AS "xsi"),
                      xmlelement(NAME "Company", digits(max(COMPANY))),
                      xmlelement(NAME "Store", max(STORE)),
                      xmlelement(NAME  "Date", max(:val_dat_xml)),
                      xmlgroup(
                      trim(ID) as "Id",
                      Case When COUNT > 0 Then COUNT Else NULL End as "Counted",
                      case when Substr(Trim(char(NUMBER)), 1, 1) = ','
                      then '0.00' else Trim(Replace(char(NUMBER), ',', '.')) end
                      as "Number",
                      order by ID asc
                      option row "TEST" root "TestList")))
                      into :myxml
                      from Data where  ID <> ' '
    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

  5. #5
    Registriert seit
    Oct 2015
    Beiträge
    109
    Genial, das hat funktioniert!
    bei meinen Versuchen fehlte mir das "Else NULL",
    da ich dachte "ansonsten mach nichts".
    Vielen Dank

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.238
    Das ist ja eine leere Spalte, ich hatte verstanden, dass dann diese Spalte im XML gar nicht ausgegeben wird.

    Aber was soll diese Abfrage, geht da nicht "Number = 0"?
    Substr(Trim(char(NUMBER)), 1, 1) = ','
    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

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Die Spalte bzw. das XML-Element wird ja auch nicht im XML ausgegeben wenn der Wert 0 (oder kleiner ist).
    Probier's aus!

    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

  8. #8
    Registriert seit
    Oct 2015
    Beiträge
    109
    Aber was soll diese Abfrage, geht da nicht "Number = 0"?
    Substr(Trim(char(NUMBER)), 1, 1) = ','
    Stimmt!
    Da hab ich das Problem wohl rückwärts angegangen und das einfachste übersehen,
    Danke

Similar Threads

  1. Antworten: 6
    Letzter Beitrag: 28-10-14, 09:42
  2. SQL Anzahl wenn mehrer Felder gleich sind
    By post in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 28-04-14, 10:39
  3. Dateifelder sind nach erfolgreichem CHAIN nicht gefüllt
    By harkne in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 19-11-13, 10:02
  4. Nachricht wenn beendet (QRYPROD)
    By heynem in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 27-03-03, 12:14
  5. Antworten: 0
    Letzter Beitrag: 24-05-02, 12:20

Berechtigungen

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