Вы хотите, чтобы для каждой комбинации других значений столбца текст, связанный с нулевым bltugp
, был добавлен перед текстом, связанным со всеми ненулевыми значениями.
Один способсделать это с помощью конкатенации и аналитической функции, чтобы найти нулевой текст для добавления:
max(case when bltugp is null then bltxt end)
over (partition by bltgs1, bltgs2, bltgs3, bltgs4, bltgs5, bltgs6, blttkz)
|| bltxt
, что даст вам три строки:
BLTGS1 BLTGS2 BLTGS3 BL BLT BLTGS6 BL TEXT
---------- ---------- ---------- -- --- ------ -- --------------------------------------------------------------------------------------------------------
2 1 12 01 007 01 erhaltene Anzahlungen auf Bestellungdavon mit einer Restlaufzeit von bis zu einem Jahr
2 1 12 01 007 02 erhaltene Anzahlungen auf Bestellungdavon mit einer Restlaufzeit von mehr als einem Jahr
2 1 12 01 007 erhaltene Anzahlungen auf Bestellungerhaltene Anzahlungen auf Bestellung
... и затем отброситьтот, который вы не хотите.В качестве примера с этими и несколькими другими, возможно, интересными строками в качестве примера данных:
-- CTE for dummy data
with bip105 (bltspriso, blttkz, bltgs1, bltgs2, bltgs3, bltgs4, bltgs5, bltgs6, bltugp, bltxt) as (
select 'DEAT', 42, 2, 1, 12, '01', '006', null, '02', 'davon mit einer Restlaufzeit von mehr als einem Jahr' from dual
union all
select 'DEAT', 42, 2, 1, 12, '01', '007', null, null, 'erhaltene Anzahlungen auf Bestellung' from dual
union all
select 'DEAT', 42, 2, 1, 12, '01', '007', null, '01', 'davon mit einer Restlaufzeit von bis zu einem Jahr' from dual
union all
select 'DEAT', 42, 2, 1, 12, '01', '007', null, '02', 'davon mit einer Restlaufzeit von mehr als einem Jahr' from dual
union all
select 'DEAT', 42, 2, 1, 12, '01', '021', null, null, 'sonstige Verbindlichkeiten' from dual
)
-- actual query
select bltgs1, bltgs2, bltgs3, bltgs4, bltgs5, bltgs6, bltugp, text
from (
select bltgs1, bltgs2, bltgs3, bltgs4, bltgs5, bltgs6, blttkz, bltugp
, max(case when bltugp is null then bltxt end)
over (partition by bltgs1, bltgs2, bltgs3, bltgs4, bltgs5, bltgs6, blttkz)
|| bltxt as text
from bip105
where bltspriso = 'DEAT'
)
where bltugp is not null
order by bltgs1, bltgs2, bltgs3, bltgs4, bltgs5, bltgs6, blttkz, bltugp;
BLTGS1 BLTGS2 BLTGS3 BL BLT BLTGS6 BL TEXT
---------- ---------- ---------- -- --- ------ -- --------------------------------------------------------------------------------------------------------
2 1 12 01 006 02 davon mit einer Restlaufzeit von mehr als einem Jahr
2 1 12 01 007 01 erhaltene Anzahlungen auf Bestellungdavon mit einer Restlaufzeit von bis zu einem Jahr
2 1 12 01 007 02 erhaltene Anzahlungen auf Bestellungdavon mit einer Restlaufzeit von mehr als einem Jahr
Если вы хотите показать также все строки на основе нулей, вы можете удалить фильтр,но также необходимо прекратить эту ценность, добавленную к себе;возможно, более простые способы, но это один из них с использованием другого выражения case:
select bltgs1, bltgs2, bltgs3, bltgs4, bltgs5, bltgs6, bltugp, text
from (
select bltgs1, bltgs2, bltgs3, bltgs4, bltgs5, bltgs6, blttkz, bltugp
, max(case when bltugp is null then bltxt end)
over (partition by bltgs1, bltgs2, bltgs3, bltgs4, bltgs5, bltgs6, blttkz)
|| case when bltugp is not null then bltxt end as text
from bip105
where bltspriso = 'DEAT'
)
order by bltgs1, bltgs2, bltgs3, bltgs4, bltgs5, bltgs6, blttkz, bltugp
BLTGS1 BLTGS2 BLTGS3 BL BLT BLTGS6 BL TEXT
---------- ---------- ---------- -- --- ------ -- --------------------------------------------------------------------------------------------------------
2 1 12 01 006 02 davon mit einer Restlaufzeit von mehr als einem Jahr
2 1 12 01 007 01 erhaltene Anzahlungen auf Bestellungdavon mit einer Restlaufzeit von bis zu einem Jahr
2 1 12 01 007 02 erhaltene Anzahlungen auf Bestellungdavon mit einer Restlaufzeit von mehr als einem Jahr
2 1 12 01 007 erhaltene Anzahlungen auf Bestellung
2 1 12 01 021 sonstige Verbindlichkeiten
Или, если вы хотите видеть только строки с нулевым индексом, когда для этой комбинации нет других, вы можете считать ненулевые записидля каждой комбинации, и исключайте пустые значения только в том случае, если существует ненулевое значение (подразумевается, что нулевое значение было добавлено и не нужно само по себе - если это действительно правило, которое вам нужно):
select bltgs1, bltgs2, bltgs3, bltgs4, bltgs5, bltgs6, bltugp, text
from (
select bltgs1, bltgs2, bltgs3, bltgs4, bltgs5, bltgs6, blttkz, bltugp
, max(case when bltugp is null then bltxt end)
over (partition by bltgs1, bltgs2, bltgs3, bltgs4, bltgs5, bltgs6, blttkz)
|| case when bltugp is not null then bltxt end as text
, count(bltugp) over (partition by bltgs1, bltgs2, bltgs3, bltgs4, bltgs5, bltgs6, blttkz)
as non_null_count
from bip105
where bltspriso = 'DEAT'
)
where non_null_count = 0 or bltugp is not null
order by bltgs1, bltgs2, bltgs3, bltgs4, bltgs5, bltgs6, blttkz, bltugp;
BLTGS1 BLTGS2 BLTGS3 BL BLT BLTGS6 BL TEXT
---------- ---------- ---------- -- --- ------ -- --------------------------------------------------------------------------------------------------------
2 1 12 01 006 02 davon mit einer Restlaufzeit von mehr als einem Jahr
2 1 12 01 007 01 erhaltene Anzahlungen auf Bestellungdavon mit einer Restlaufzeit von bis zu einem Jahr
2 1 12 01 007 02 erhaltene Anzahlungen auf Bestellungdavon mit einer Restlaufzeit von mehr als einem Jahr
2 1 12 01 021 sonstige Verbindlichkeiten
До сих пор не совсем ясно, что вы хотите увидеть ...