sql >> Database teknologi >  >> RDS >> Sqlserver

Filtrering af dubletter i en tabel uden en primær nøgle

declare @T table
(
  catalogue_code int,
  purcha varchar(5),
  stock_ varchar(5)
)

insert into @T values
(1001,            'Box',     'Box'),
(1001,            'Box',     'Box'),
(1002,            'AA',      'AA'),
(1002,            'MM',      'MM'),
(1002,            'EA',      'EA'),
(1002,            'Set',     'Set'),
(1002,            'Kit',     'Kit'),
(1004,            'Set',     'Set')

;with C as
(
  select *,
         row_number() over(partition by catalogue_code 
                           order by case when purcha = 'EA'
                                         then 0
                                         else 1
                                    end) as rn
  from @T
)
select *
from C
where rn = 1

Resultat:

catalogue_code purcha stock_ rn
-------------- ------ ------ --------------------
1001           Box    Box    1
1002           EA     EA     1
1004           Set    Set    1

Prøv det på SE-Data Explorer:https://data.stackexchange.com/stackoverflow/ q/114648/



  1. Gruppér efter værdier, der er i rækkefølge

  2. Er en deadlock mulig, når du opdaterer og sletter forskellige rækker i en tabel?

  3. Slet rækker fra tabel, undtagen angivet antal (begrænset antal rækker)

  4. Hvorfor 'explain'-kommando giver forskellige resultater på samme SQL-sætning?