Удаление ненужного ряда - PullRequest
       12

Удаление ненужного ряда

0 голосов
/ 08 октября 2019

У меня проблема с удалением дублированных строк. Я пытался использовать ORDER BY для удаления дубликатов, но он должен быть более сложным, и я не уверен, как это сделать. У меня есть несколько повторяющихся строк, которые я хотел бы удалить, где номер счета равен нулю, но что усложняет ситуацию, так это то, что есть строки, в которых вообще нет номера счета, и я хочу их сохранить.

Например:

       AppID | First Name | Last Name |   SSN  | Account Number
Keep:  1021    John         Doe        ********  124989
Remove 1021    John         Doe        ********  NULL
Keep:  1287    Mary         Smith      ********  NULL

Ответы [ 3 ]

0 голосов
/ 08 октября 2019
select * from (
select data.*, 
---------you can add colums after partition by part. and decide which rows is needed and take them
row_number() over(partition by appid,first_name,last_name,ssn order by case when trim (account_number)= '' then 0 else 1 end desc)  rn
-----
from  (
select 1021 appid,'john' first_name,'doe' last_name, '****' ssn,124989 account_number from dual
union all
select 1021 appid,'john' first_name,'doe' last_name, '****' ssn,null account_number from dual
union all
select 1287 appid,'mary' first_name,'smith' last_name, '****' ssn,null account_number from dual
)data
)where rn=1
0 голосов
/ 08 октября 2019

Один метод - 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;
0 голосов
/ 08 октября 2019

Как удалить дубликаты строк в SQL Server?

Это должно помочь вам решить вашу проблему. В следующий раз вы должны искать StackOverFlow более осторожно.

...