2014-11-06 56 views
0

我有一個表,如下所示:SQL選擇一個類別爲每個不同的ID

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 

我能想到的唯一的辦法就是通過某種循環。

有什麼建議嗎? 感謝

回答

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; 
0

有每個ID多個類別,不是我的最好的設計。 每個表都必須有一個主鍵。

雖然你可以使用DISTINCT

SELECT DISTINCT id FROM categories 
選擇唯一值