Что-то вроде этого:
with sample_data as (select 1 con_ref, 'NON' col_ref, 25 sal from dual union all
select 1 con_ref, 'COL' col_ref, 36 sal from dual union all
select 1 con_ref, 'COL' col_ref, 12 sal from dual union all
select 1 con_ref, 'NON' col_ref, 16 sal from dual union all
select 2 con_ref, 'NON' col_ref, 25 sal from dual union all
select 2 con_ref, 'NON' col_ref, 6 sal from dual union all
select 2 con_ref, 'NON' col_ref, 33 sal from dual union all
select 3 con_ref, 'COL' col_ref, 42 sal from dual union all
select 3 con_ref, 'NON' col_ref, 51 sal from dual union all
select 4 con_ref, 'NON' col_ref, 63 sal from dual union all
select 4 con_ref, 'NON' col_ref, 31 sal from dual union all
select 4 con_ref, 'NON' col_ref, 15 sal from dual)
-- end of mimicking a table called sample_data with data in it
select con_ref,
sum(sal)
from sample_data
group by con_ref
having count(case when col_ref != 'NON' then 1 end) = 0;
CON_REF SUM(SAL)
---------- ----------
2 64
4 109
ETA: Тот же результат по запросу без использования GROUP BY
(NB это для Oracle, я понятия не имею ли он будет работать на других платформах):
with sample_data as (select 1 con_ref, 'NON' col_ref, 25 sal from dual union all
select 1 con_ref, 'COL' col_ref, 36 sal from dual union all
select 1 con_ref, 'COL' col_ref, 12 sal from dual union all
select 1 con_ref, 'NON' col_ref, 16 sal from dual union all
select 2 con_ref, 'NON' col_ref, 25 sal from dual union all
select 2 con_ref, 'NON' col_ref, 6 sal from dual union all
select 2 con_ref, 'NON' col_ref, 33 sal from dual union all
select 3 con_ref, 'COL' col_ref, 42 sal from dual union all
select 3 con_ref, 'NON' col_ref, 51 sal from dual union all
select 4 con_ref, 'NON' col_ref, 63 sal from dual union all
select 4 con_ref, 'NON' col_ref, 31 sal from dual union all
select 4 con_ref, 'NON' col_ref, 15 sal from dual)
-- end of mimicking a table called sample_data with data in it
select distinct con_ref,
sum_sal
from (select con_ref,
sum(sal) over (partition by con_ref) sum_sal,
count(case when col_ref != 'NON' then 1 end) over (partition by con_ref) cnt_non_non_con_ref
from sample_data)
where cnt_non_non_con_ref = 0;
CON_REF SUM_SAL
---------- ----------
4 109
2 64
Совершенная Спасибо @Boneist – SAIar
Есть ли способ получить тот же вывод без использования группы. Я имею в виду, просто используя инструкцию select. @boneist – SAIar
Почему вы не хотите использовать группу? Вы хотите суммировать столбцы sal, так что вам придется использовать функцию SUM(). Теперь, вероятно, можно добиться того же результата, используя аналитические функции 'SUM()' и 'COUNT()' вместе с 'DISTINCT', но почему бы вам побеспокоить, когда вы можете сделать все это в простой группе с помощью инструкции? – Boneist