2014-11-06 3 views
0

У меня есть таблица, которая выглядит следующим образом:SQL Выберите одну категорию для каждого отдельного идентификатора

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

Имея несколько категорий по каждому идентификатору не является целесообразным дизайн для меня. Каждая таблица должна иметь первичный ключ.

Хотя вы можете выбрать уникальные значения, используя DISTINCT

SELECT DISTINCT id FROM categories 
Смежные вопросы