2014-12-24 6 views
-1

Я пытаюсь сформировать запрос для следующего сценариявыберите строки, имеющие одинаковое значение столбца

если мой стол

signature | id | operation 

abc  | 1 | 1234 

xyz  | 1 | 1234 

pqr  | 2 | 1234 

то мой вывод должен быть

signature | id 

abc  | 1 

xyz  | 1 

т.е. строки, имеющие одинаковый значение в определенном столбце.

я сформировал запрос как

select signature,id 
from tablename 
where operation = '1234' 
group by signature,id 
having count(*) >0; 

, но это возвращается все, включая А | 1 также.

Может кто-нибудь предложить мне правильный запрос?

+1

Почему есть группа для подписи? –

+0

Можете ли вы объяснить, что именно вы хотите? –

+0

Я пробовал без подписи для groupby, но это дает мне следующую ошибку. ORA-00979: не выражение GROUP BY – user2860516

ответ

0

Попробуйте это:

SELECT signature,COUNT(id) FROM table_name WHERE operation = '1234' GROUP BY id; 
+0

У вас есть идея, что его недействительная группа по выражению в oracle? –

+0

его недействительно в оракуле. Ошибка: ORA-00979: не выражение GROUP BY и как считать условие одинакового значения столбца? – user2860516

+0

Я отредактировал мой ответ .. попробуйте новый .. –

0

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

SELECT Signature, ID from tablename WHERE ID in(SELECT ID FROM (SELECT ID, COUNT(*) as NumRecords from tablename GROUP BY ID HAVING NumRecords > 1)))

+0

Я написал это для оригинального тега MYSQL - не знаю, работает ли это для Oracle. – KingOfTheNerds

0

Попробуйте это:

Мы необходимо применять PARTITION на колонке с идентификационным номером следующим образом:

SELECT Результат. [Подпись], Result.ID, ROW_NUMBER() over (PARTITION BY Result.ID ORDER BY Result.ID) AS [RowNum] INTO #TempResult FROM table_name AS Результат GROUP BY Результат. [Подпись], Result.ID

ВЫБРАТЬ Результат. [подпись], Result.ID
ОТ #TempResult AS Result где результат. [RowNum] = 1

0

Вы можете использовать where exists для альтернативы group by

select 
signature, 
id 
from tablename t1 
where exists (
    select * from tablename t2 
    where t1.id = t2.id 
    and t1.signature != t2.signature 
    and t1.operation = 1234 
); 
+0

это также возвращает evverything. т. е. все 3 записи. – user2860516

+0

Не уверен, что вы получаете, проверяйте скрипку http://www.sqlfiddle.com/#!4/53213a/2 –

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