SQL为每个不同的id选择一个类别

时间:2014-11-06 00:31:17

标签: sql sql-server tsql duplicates

我的桌子看起来像这样:

id  category
1   motor
1   car
1   truck
2   home
2   garden
2   lawn
3   computer
3   electrical

可以使用此SQL重新创建:

create table categories
(
    id int,
    category varchar(20)
)


insert into categories values(1,'motor')
insert into categories values(1,'car')
insert into categories values(1,'truck')
insert into categories values(2,'home')
insert into categories values(2,'garden')
insert into categories values(2,'lawn')
insert into categories values(3,'computer')
insert into categories values(3,'electrical')

select * from categories

每个id都有多个类别,我想为每个id选择一个类别。让我们说第一个。所以我希望决赛桌看起来像这样:

id  category
1   motor
2   home
3   computer

我能想到的唯一方法是通过某种循环。

有什么建议吗? 感谢

2 个答案:

答案 0 :(得分:1)

您可以使用row_number()

执行此操作
select c.id, c.category
from (select c.*, row_number() over (partition by id order by id) as seqnum
      from categories c
     ) c
where seqnum = 1;

SQL表表示无序集,因此没有"第一个"行,除非您有另一列指定排序。您可以使用newid()

获取随机行
select c.id, c.category
from (select c.*, row_number() over (partition by id order by checksum(newid())) as seqnum
      from categories c
     ) c
where seqnum = 1;

答案 1 :(得分:0)

对每个ID都有多个类别对我来说不是一个明智的设计。 每个表都必须有一个主键。

虽然您可以使用 DISTINCT

选择唯一值
SELECT DISTINCT id FROM categories