Группа уникальных повторяющихся значений (что? да) Oracle SQL
Есть таблица вида
| ID | HIGH | LOW |
|---|---|---|
| id1 | 1 | 0 |
| id1 | 1 | 0 |
| id1 | 0 | 0 |
| id2 | 0 | 0 |
| id2 | 0 | 0 |
| id2 | 0 | 0 |
| id2 | 0 | 0 |
| id2 | 0 | 0 |
Как мне создать запрос в oracle sql (sqldeveloper, если важно), который отфильтрует только те записи, где в HIGH и LOW всё по нулям для каждого отдельного ID (для примера как в ID2 - там в каждой строке везде нули, а в ID1 только в одной - он в выборку попадать не должен)
Уже всю голову сломал, как запрос написать, чтобы выцепить подобные ID, где во всех вхождениях HIGH и LOW были нули (т.е. даже если в одной строчке где-то будет 1, то ID должен отвалится и в выборку не попасть). Проблема (для меня) в том, что в первом столбце получается много уникальных, но повторяющихся ID, поэтому дистинкт и тому подобное там нельзя использовать...или?
Ответы (2 шт):
Можно попробовать вот так
select id from table t
where t.HIGH = 0 and t.LOW = 0
minus
select id from table t
where t.HIGH <> 0 or t.LOW <> 0
Кажется, как-то так:
select id from high_and_low
group by id
having sum(high + low) = 0
По поводу одних NULL должно работать такое, просто делаем из NULL нули, а из остального единицы и проверяем в итоге тоже самое:
select id from high_and_low
group by id
having sum(NVL2(high, 1, 0) + NVL2(low, 1, 0)) = 0