我的桌子看起来像这样:
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
我能想到的唯一方法是通过某种循环。
有什么建议吗? 感谢
答案 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