2014-07-17 5 views
4

표는 다음과 같다 :SQL 중복 쿼리

id name 
1 tom 
2 bob 
3 tom 
4 tom 
5 harry

나는 다음 초래 쿼리를 찾고 있어요 :

그래서 첫 번째 톰에 대한 duplicateposition가, 1

id name duplicateposition 
1  tom  1 
2  bob  1 
3  tom  2 
4  tom  3 
5  harry 1
두 번째 톰은 2이고 세 번째 톰은 3입니다. 첫 번째 밥은 1이고 첫 번째 해리는 1입니다.이 작업을 수행하기위한 쉬운 쿼리가 있습니까? 그게 내 최선 그래서 내가 SQL에 작은 새를 해요

SELECT id, name, count(id) from table 

:

여기 내 시도이다.

+0

내가 엄지 손가락을 뽑는 이유는 무엇입니까? 나는 합법적 인 질문을하고있다. –

+0

투표 수가 많습니다 (마우스를 아래쪽 화살표 위로 가져 가면됩니다). 귀하의 합법적 인 질문은 노력이나 시도가 없다는 것을 보여줍니다. 여러분을 돕기 위해 제공되는 코드가 없습니다. 미래의 방문자를 도울 가능성은 거의 없습니다. – Kermit

+1

나는 본다. 내가 그것을 향상시킬거야 –

답변

1

다음을 수행 할 수 있습니다. 데이터를 이름으로 파티션하고 파티션에서 번호를 지정합니다. 내가 SQL 서버에 이런 짓을 언급하는 것을 잊었다 2012

select *, 
    row_number() over (partition by name order by id) as DuplicatePosition 
from test 
order by id 

SQL Fiddle Demo

1

여기에 일반적인 자기는 윈도우 기능에 액세스 할 수있는 경우가 '당신이 대신을 사용해야하지만 (대부분의 데이터베이스에서 작동하는 가입이다 일반적으로 빠름)

select t1.id, t1.name, count(t2.id) duplicateposition 
from mytable t1 
join mytable t2 
    on t2.name = t1.name 
    and t2.id <= t1.id 
group by t1.id, t1.name 
order by t1.id