Один метод - row_number()
. Если вам нужна одна строка для всех комбинаций первых пяти столбцов:
select t.*
from (select t.*,
row_number() over (partition by AppID, First Name, Last, Name, SSN
order by (case when account_number is not null then 1 else 2 end)
) as seqnum
from t
) t
where seqnum = 1;
Используйте rank()
, если вы хотите сохранить все строки с действительными учетными записями - хотя вам может потребоваться дополнительная логика, если вы можете иметьнесколько строк с NULL
учетными записями.
Однако агрегация также может делать то, что вы хотите:
select AppID, First Name, Last, Name, SSN, max(account_number)
from t
group by AppID, First Name, Last, Name, SSN;