Ich versuche, das Feld einer XML-Datei entweder mit "0" zu füllen, wenn eine bestimmte Spalte (pv_an4) nicht existiert, ODER mit dem Wert der Spalte, wenn es existiert. so weitFall, wenn existiert - Spalte (SQL)
Dies ist mein Code:
XMLELEMENT(Name "Telephone",
case
when not exists (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'phonebook' AND COLUMN_NAME = 'pv_an4') then ''
when exists (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'phonebook' AND COLUMN_NAME = 'pv_an4') then pv_an4
end),
Als ich dies ausführen bekomme ich diesen Fehler:
FEHLER: Column »pv_an4« does not exist ZEILE 25: ...E_NAME = 'phonebook' AND COLUMN_NAME = 'pv_an4') then pv_an4
Aber das macht für mich keinen Sinn machen, denn zum Beispiel mit diesem Code es würde funktionieren:
Ich habe den ganzen Tag versucht, dieses Problem zu lösen, könnte jemand mich in der richtigen Richtung Richtung, bitte?
/edit: Volle Abfrage rechts unten:
SELECT
XMLFOREST(xmlpb.entry as "DivinusIPPhoneDirectory")
FROM (
SELECT
XMLCONCAT (
XMLELEMENT (NAME "Title", 'Phonelist'),
XMLELEMENT (NAME "Prompt", 'Prompt'),
XMLAGG (
XMLELEMENT (
NAME "DirectoryEntry",
XMLELEMENT(Name "Name",
case
when (pb.company = '') IS FALSE AND pb.lastname != '' and pb.firstname != '' then pb.company || ' - ' || pb.lastname || ', ' || pb.firstname
when (pb.company = '') IS FALSE AND pb.lastname != '' and pb.firstname = '' then pb.company || ' - ' || pb.lastname
when (pb.company = '') IS FALSE AND pb.lastname = '' and pb.firstname = '' then pb.company
when (pb.company = '') IS FALSE AND pb.lastname = '' and pb.firstname != '' then pb.company || ' - ' || pb.firstname
when (pb.company = '') IS NOT FALSE AND pb.lastname != '' and pb.firstname != '' then pb.lastname || ', ' || pb.firstname
when (pb.company = '') IS NOT FALSE AND pb.lastname != '' and pb.firstname = '' then pb.lastname
end),
XMLELEMENT(Name "Telephone", pb.pv_an3),
XMLELEMENT(Name "Telephone",
case
when not exists (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'phonebook' AND COLUMN_NAME = 'pv_an4') then ''
else pb.pv_an4
end),
XMLELEMENT(Name "Telephone", pb.phonenumber),
XMLELEMENT(Name "Telephone", pb.pv_an1),
XMLELEMENT(Name "Telephone", pb.pv_an2)
)
)
) as entry
FROM
phonebook pb
WHERE fkidtenant = 1
Das ist, weil ich den Spaltenwert verwenden möchte, wenn die Spalte existiert. Wenn die Spalte nicht existiert, möchte ich das Ergebnis des Falls leer haben. – bibz
Veröffentlichen Sie Ihre vollständige Abfrage. Sie verwenden 'pv_an4', aber nicht von der Tabelle' Telefonbuch', so dass die Verwirrung sein kann. –
@RudyM das OP weiß nicht, ob eine bestimmte Spalte in einer Tabelle existiert oder nicht und möchte dies direkt in der Auswahl behandeln. Hat ihm schon gesagt, dass dies ein Nein ist. – Shadow