Ich verwende das folgende Skript, um einige grundlegende Informationen zurückzugeben. das Skript gibt 65 Zeilen (wie erwartet) ...Oracle SQL: Rückgabe Nullwert, wenn kein listagg Ergebnis
select unique
trunc(li.cre_dat) cre_date,
li.cre_usr,
li.catnr,
li.av_part_no,
li.artist,
li.title,
li.prodtyp,
li.packtyp,
nvl(sp.name_for_customer,sp.name) pack_type
from leos_item li,
scm_packtyp sp
where li.cunr in ('816900','816901','816902')
and li.item_type = 'FP'
and li.av_part_no is null
and trunc(li.cre_dat) >= '01-JAN-2016'
and li.model_force_creation_idc != 'Y'
and li.i_status != 'I'
and li.packtyp = sp.packtyp
... aber, wenn ich Listagg in meiner wählt, der Bericht liefert nur 55 Zeilen hinzufügen. 10 Zeilen haben kein Listagg-Ergebnis, daher werden die Ergebnisse weggelassen ...
select unique
trunc(li.cre_dat) cre_date,
li.cre_usr,
li.catnr,
li.av_part_no,
li.artist,
li.title,
li.prodtyp,
li.packtyp,
nvl(sp.name_for_customer,sp.name) pack_type,
regexp_replace(listagg(nvl(bom.av_part_no,'No'), ', ')
within group (order by bom.item_id),'([^,]+)(,\1)+', '\1') masters
from leos_item li,
scm_packtyp sp,
TABLE(leos_flatbom_pkg.GetFlatBOM(li.item_id)) bom,
leos_item li1
where li.cunr in ('816900','816901','816902')
and li.item_type = 'FP'
and li.av_part_no is null
and trunc(li.cre_dat) >= '01-JAN-2016'
and li.model_force_creation_idc != 'Y'
and li.i_status != 'I'
and li.packtyp = sp.packtyp
and bom.item_id = li1.item_id
and li1.item_type = 'MT'
group by li.cre_dat,
li.cre_usr,
li.catnr,
li.av_part_no,
li.artist,
li.title,
li.prodtyp,
li.packtyp,
nvl(sp.name_for_customer,sp.name)
Aber ich muss auch diese Zeilen sehen. Gibt es eine Möglichkeit, die 10 Zeilen zurückzugeben, in denen kein Listagg-Ergebnis gefunden wurde. Ich habe die folgenden Kombinationen von nullif und nvl ausprobiert, aber ohne Glück;
nullif(regexp_replace(listagg(nvl(bom.av_part_no,'No'), ', ') within group (order by bom.item_id),'([^,]+)(,\1)+', '\1'),'No Master')
nvl(regexp_replace(listagg(nvl(bom.av_part_no,'No'), ', ') within group (order by bom.item_id),'([^,]+)(,\1)+', '\1'),'No Master')
können Sie einige Beispieldaten vielleicht ein mit t konstruieren oder eine kleine Tabellendefinition mit einem Post einige Insert-Anweisungen, um Ihr Problem zu zeigen. Ich habe gerade eine kleine Liste mit der HR Mitarbeiter Tabelle versucht und die Nullen wurden zurückgegeben. SELECT department_id, LISTAGG (commission_pct, ',') WITHIN GRUPPE (ORDER BY hire_date, last_name) von Mitarbeitern group by department_id; –