Я хотел бы устранить дублирование, основанное на идентификаторе компании. Я не забочусь о том, какая из записей под именем модели будет удалена/оставлена.
У меня есть следующие результаты:
+------------+------------------+
| 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 |
+------------+------------------+
Что я должен делать?
Вы можете использовать group by
:
select companyid, min(modelname) as modelname
from t
group b companyid;
Я бы попробовал такой подход:
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:
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