TableOne
PersonId PersonScore
1 10
1 20
2 99
2 40
3 45
PersonId가 두 번 이상 나타나는 행만 반입해야합니다. 다음은 내가 CTE두 번 이상 표시되는 행 선택
;WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY i.PersonId ORDER BY i.PersonId) AS [Num]
FROM TableOne i
)
SELECT *
FROM cte
WHERE cte.Num > 1
문제는이 여분의 열을 제거하는 것입니다을 사용하고
PersonId PersonScore
1 10
1 20
2 99
2 40
달성하고자하는 결과 집합입니다. PersonId의 첫 번째 인스턴스를 낭독합니다. 사람이 당신은 오히려 row_number()
보다, 윈도우 함수로 count(*)
을 사용하려면
을 가능한 중복 [그룹화 된 SQL Server 수] (http://stackoverflow.com/questions/4700155/sql-server-count-on-a-grouped-by) –
@TomaszKowalczyk : 그는 원하지 않습니다. 수를 세지 만 고유하지 않은 PersonId가 포함 된 완전한 행을 얻습니다. 따라서 'GROUP BY'가 잘못된 방법입니다. –