SQL Oracle: Фильтрация по условиям в группе
Имею таблицу следующего вида,
a b c d f
apple qw er null null
apple qw er 123 456
pear ed rt 342 234
pear ed rt 675 897
pear ed rt 786 876
plum ed rt null null
plum ed rt null null
на выходе пытаюсь получить:
a b c d f
apple qw er null null
apple qw er 123 456
возможно ли как-то в селекте отфильтровать строки группы,
при этом в этой группе должна быть хотя бы по одной строке со значением null и не равно null для колонки d,
в какую сторону лучше смотреть? возможно ли как-то получить через case или в сторону оконных функций?
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
WITH cte As (
SELECT a,b,c,d,f,
SUM(CASE WHEN d IS NULL THEN 0 ELSE 1 END) OVER (PARTITION BY a,b,c) non_nulls,
SUM(CASE WHEN d IS NULL THEN 1 ELSE 0 END) OVER (PARTITION BY a,b,c) nulls
FROM test
)
SELECT a,b,c,d,f
FROM cte
WHERE nulls > 0 AND non_nulls > 0
https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=f2f7e04c5ffa80fa693d29f132099003