PDA

View Full Version : XML SQL - Tag nur zeigen wenn gefüllt



dholtmann
22-03-16, 16:30
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:


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.

Fuerchau
22-03-16, 18:15
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.

dholtmann
23-03-16, 06:39
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.

B.Hauser
23-03-16, 07:58
So sollte es funktionieren:


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

dholtmann
23-03-16, 08:26
Genial, das hat funktioniert!
bei meinen Versuchen fehlte mir das "Else NULL",
da ich dachte "ansonsten mach nichts".
Vielen Dank

Fuerchau
23-03-16, 09:14
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) = ','

B.Hauser
23-03-16, 09:36
Die Spalte bzw. das XML-Element wird ja auch nicht im XML ausgegeben wenn der Wert 0 (oder kleiner ist).
Probier's aus!

Birgitta

dholtmann
23-03-16, 12:33
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