Используйте аналитические функции для вычисления флага, если для Account_ID
существует account_type
.
Например, эта аналитическая функция
max(case when Account_type='First' then 1 else 0 end) over(partition by account_id) first_exists_flag
будет 1
для всех account_id=101
записи и 0
для всех других записей в вашем наборе данных.Надеюсь, у вас есть идея.
Выберите Второй тип_счета, когда Первый не существует:
with account as (
select a.*,
max(case when Account_type='First' then 1 else 0 end) over(partition by account_id) first_exists_flag,
max(case when Account_type='Second' then 1 else 0 end) over(partition by account_id) second_exists_flag
--you can add more such flags
from Account a
)
select account_id, account_type
from account a
where a.account_type='Second' and first_exists_flag=0;
Выберите Третий тип_счета, когда Первый и Второй не существуют:
with account as (
select a.*,
max(case when Account_type='First' then 1 else 0 end) over(partition by account_id) first_exists_flag,
max(case when Account_type='Second' then 1 else 0 end) over(partition by account_id) second_exists_flag
--you can add more such flags
from Account a
)
select account_id, account_type
from account a
where a.account_type='Third' and first_exists_flag=0 and second_exists_flag=0;
Вы также можете вычислить флаг, когда существует какой-либо другой тип, кроме третьего account_type:
max(case when Account_type <> 'Third' then 1 else 0 end) over(partition by account_id) other_account_exist_flag
И отфильтровать, используя other_account_exist_flag=0