Найдите, являются ли все определенные столбцы в группе значениями NULL, затем заполните целевой объект соответствующим образом.У меня есть набор записей, как указано ниже.Мое требование состоит в том, чтобы заполнить выходной столбец «total» на основе - 1) Внутри группы (или раздела), если столбец «trans_dt» во всех строках имеет значение NULL, затем заполните столбец «total» в выходных данных как zer0. 2) Еслилюбая из записей имеет допустимое значение (в столбце trans_dt), затем заполняет «total» максимальным значением «items» для этой группы, а trans_dt в качестве MAX trans_dt для этой группы
custid|transact_dt|items
------------------------
1234|05/01/2019|3
1234|10/02/2019|4
1234|Null|3
5678|Null|5
5678|Null|3
5678|Null|1
5678|Null|2
В указанном выше наборе записей custid «1234» имеет допустимые значения в trans_dt в 2 рядах, поэтому выходной столбец «total» должен быть заполнен как «4».Однако для custid "5678" все значения trans_dt имеют значение Null, поэтому значение "total" должно быть заполнено как 0.
custid|transact_dt|items
------------------------
1234|10/02/2019|4
5678|31/12/9999|0
select custid, max_trans_dt,
CASE WHEN max_trans_dt IS NULL then 0
ELSE total
END as total
from
( select custid, MAX(trans_dt) OVER (PARTITION BY custid) as max_trans_dt, MAX(items) OVER (PARTITION BY custid) as total,
ROW_NUMBER() OVER (PARTITION BY custid order by trans_dt desc, items desc) as rn ) tmp
WHERE tmp.rn = 1
Есть ли более разумное и чистое решение для вышеуказанного требования?Спасибо