2015-11-02 1 views
0

В моей базе данных есть таблица затрат на предметы. Элементы могут иметь более одной записи затрат.Как выбрать строки, в которых у этой записи есть несколько записей?

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

Поле UPC - F01, а таблица называется COST_TAB. Я хочу только захватить элементы, где есть несколько записей, основанных на поле F01.

Я борюсь с тем, как написать этот запрос.

+0

Посмотрите http://stackoverflow.com/questions/7151401/sql-query-for-finding-records-where-count-1. Это должно помочь. –

ответ

2
select F01 
from COST_TAB 
group by F01 
having count(*) > 1 
1

Вы должны использовать группу по

select f01 
from cost_tab 
group by f01 
having count(f01) > 1 
0
select * from COST_TAB 
Where COST_TAB.UPC in (select COST_TAB.UPC from COST_TAB group by COST_TAB.UPC having (Count(COST_TAB.UPC) >1) and COST_TAB.UPC = 'F01' 
0

Предположительно, вы хотите, чтобы все поля в строках дубликатов (в противном случае, простой запрос агрегации получает вас F01 значения). Я хотел бы использовать оконные функции для этого:

select ct.* 
from (select ct.*, count(*) over (partition by f01) as cnt 
     from cost_tab ct 
    ) ct 
where cnt > 1; 
+0

со всем уважением ... этот фактический не работает. Я обновил его для ya ...;) +1 –

+0

@samyi. , , Ваши изменения были неверными. Если вы ничего не понимаете, спросите. –

+0

Пожалуйста, взгляните на свой первоначальный ответ. Это не то же самое, что вы обновили. Исходный ответ, по сути, неверен. Я бы сказал, что ваш «новый» ответ, пока он работает, все еще плохо написан (неоднозначный псевдоним таблицы). Если вы хотите узнать, почему это неверно, спросите пожалуйста. ;) –

Смежные вопросы