В этом сценарии есть два столбца.
Предостережение Если идентификатор дела связан с несколькими полами, он может иметь несколько записей.
Пример набора данных:
ColumnA ColumnB
Case001 Male
Case001 Female
Case002 Male
Case003 Female
data set continues...
Вопрос: Я хотел бы классифицировать результаты как в случае 001, где есть два результата как «Оба». Как лучше всего подойти к этому решению? Есть ли формула или стандартный способ сделать это?
Пример желаемого набора данных:
ColumnA ColumnB
Case001 Both
Case002 Male
Case003 Female
data set continues...
Спасибо!
Я могу выполнить оператор case и подзапросы. Тем не менее, я ожидаю, что будет лучшее решение.
Используйте агрегацию и выражение case
:
select col1,
(case when min(gender) = max(gender) then min(gender)
else 'both'
end) as gender
from cases c
group by col1;
Вы можете использовать EXISTS в операторе CASE:
select distinct
t.ColumnA,
case
when exists (
select 1 from tablename
where ColumnA = t.ColumnA and ColumnB <> t.ColumnB
) then 'Both'
else t.ColumnB
end
from tablename t
group by
с предложениями having
в сочетании с union all
, как показано ниже, может быть хорошей альтернативой:
with t( ColumnA, ColumnB ) as
(
select 'Case001', 'Male' union all
select 'Case001', 'Female' union all
select 'Case002', 'Male' union all
select 'Case003', 'Female'
)
select ColumnA, 'Both' ColumnB from t group by ColumnA having count(distinct ColumnB) = 2
union all
select ColumnA, max(ColumnB) from t group by ColumnA having count(distinct ColumnB) = 1;
ColumnA ColumnB
------- -------
Case001 Both
Case002 Male
Case003 Female
Поскольку есть только два возможных случая для полов, когда один из них или оба из них