2015-10-08 5 views
0

У меня есть таблица вроде этого:SQL Выбрать из той же таблицы

enter image description here

Я хотел бы написать запрос, который выводит записи, которые имеют occurencies для обоих 2000 и 2001 годах только.

В этом случае результат будет

Bb 2000 
Bb 2001 

, потому что только записи с именем Bb имеют occurencies на оба года.

Я пробовал подзапросы и соединения, но не имел успеха, поскольку эти два столбца не являются первичными ключами и внешними ключами.

спасибо.

+0

Что делать, если 'bb' также произошло иметь запись для '2005', хотите ли вы его вернуть, или только записи 2000/2001? Или, если бы эта дополнительная запись «2005» фактически дисквалифицировала любые строки «Bb» от полного возврата? – sstan

+0

Я уже решил свою проблему на основе решения, предоставленного @vkp. Но для ответа на ваш вопрос моя таблица может содержать только «2000» или «2001» в столбце _year_. Никакой другой год не появится. Однако, если бы можно было иметь другие значения для _year_, тогда я хотел бы получить записи, которые имели более одного года для одного и того же _name_. – RodWall

ответ

1

Вы можете использовать intersect для этого.

select x.name, x.year from 
(
select name from table where year = 2000 
intersect 
select name from table where year = 2001 
) t join table x on t.name = x.name 
1

Моя таблица может иметь только 2000 или 2001 в year колонке. Никакой другой год не появится. Однако, если бы можно было иметь другие значения для year, тогда я хотел бы получить записи, которые имели более одного года для того же name.

Если вы когда-либо иметь необходимость иметь дело с другими годами, как описано в свой комментарий, то это вопрос, я хотел бы использовать:

select id, name, year 
    from (select id, name, year, 
       count(distinct year) over (partition by name) as distinct_year_cnt 
      from table_name) 
where distinct_year_cnt > 1 
Смежные вопросы