Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Филтриране на дубликати в таблица без първичен ключ

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

Резултат:

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

Опитайте го в SE-Data Explorer:https://data.stackexchange.com/stackoverflow/ q/114648/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2008 Mgmt Studio:Неправилен синтаксис близо до всичко, използващо подзаявка

  2. Различно произволно генериране на време във фиксиран интервал

  3. изберете влошаване на производителността на отчета, когато използвате DISTINCT с параметри

  4. Как да върна XML от SQL Server 2008, който е структуриран с множество селекции, споделящи общ родител

  5. използвайки типа данни datetimeoffset с jTDS