Удалить дублирование на основе информации одного столбца

0

Я хотел бы устранить дублирование, основанное на идентификаторе компании. Я не забочусь о том, какая из записей под именем модели будет удалена/оставлена.

У меня есть следующие результаты:

+------------+------------------+
| company id | model name       |
+------------+------------------+
|    1       | chevrolet camaro |
|    1       | chevrolet spark  |
|    1       | chevrolet cruze  |
|    2       | mercedes c class |
|    2       | mercedes E class |
+------------+------------------+

И я хотел бы получить следующие результаты:

+------------+------------------+
| company id | model name       |
+------------+------------------+
|    1       | chevrolet camaro |
|    2       | mercedes c class |
+------------+------------------+

Или эти результаты (Дело в том, что мне все равно, какое из имени модели будет устранено):

+------------+------------------+
| company id | model name       |
+------------+------------------+
|    1       | chevrolet spark  |
|    2       | mercedes E class |
+------------+------------------+

Что я должен делать?

Теги:

3 ответа

2
Лучший ответ

Вы можете использовать group by:

select companyid, min(modelname) as modelname
from t
group b companyid;
  • 0
    Я бы просто добавил, что @Moyshe может захотеть создать промежуточную таблицу в форме его начальной таблицы с таблицей create table B like table A , вставить результаты в, вставив insert into B перед оператором select, и закончить с rename table A as A_old а затем rename table B as A и при необходимости drop table A_old
0

Я бы попробовал такой подход:

declare @tbl table (ID int, car nvarchar(100))
declare @tblTemp table (ID int, car nvarchar(100))
insert into @tbl(ID, car)
values
( 1 ,'chevrolet camaro'),
(1 ,'chevrolet spark'),  
(1 ,'chevrolet cruze'),  
(2 ,'mercedes c class'), 
(2 ,'mercedes E class'), 
(1 ,'chevrolet camaro'),
(1 ,'chevrolet spark'),  
(1 ,'chevrolet cruze'),  
(2 ,'mercedes c class'), 
(2 ,'mercedes E class')

insert into @tblTemp
select distinct  MAX(id), car from @tbl
group by car

delete from @tbl


insert into @tbl (car)
select car from @tblTemp

declare @i int  
  SELECT @i= ISNULL(MAX(id),0)  FROM @tbl


update @tbl
set id  = @i , @i = @i + 1
where id is null
select * from @tbl

Результат SQL: Изображение 174551

0

Попробуй это

ALTER IGNORE TABLE 'yourTableName' ADD UNIQUE ('company id');

ссылка: здесь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню