2011-10-14 2 views
-4

우리의 목적에 맞게 단순화 한 쿼리가 있습니다. 이 결과를 어떻게 얻습니까? 해당 OrigId 테이블에 두 번 이상 나타나는 모든 행을 돌아 오게하려면은 t-sql에서 간단한 쿼리가 필요합니다.

ID OrigId 
---------- 
1 1 
2 1 
3 3 
4 4 
5 4 
6 6 

Result 

ID OrigId 
---------- 
1 1 
2 1 
4 4 
5 4 
+0

은 무엇됩니다 HAVING 문을 사용할 수 있습니다 사용할 수 있습니다 당신은 제외하려고합니까? ID 또는 OrigID를 필터링하고 있습니까? – tsells

+0

나는 이것을 따르지 않는 유일한 사람인가? 원본에서 변경되지 않은 것을 필터링하려고합니까? 그렇다면 왜 4,4가 반환 되나 6,6은 반환되지 않습니까? –

+1

@MikeChristensen - OP의 설명은 존재하지 않지만 'OrigId'가 두 번 이상 나타나는 행으로 반환되어야합니다. –

답변

3

당신은

SELECT * 
FROM dbo.Table 
WHERE OrigID IN 
(
SELECT OrigID 
FROM dbo.Table 
GROUP BY OrigID 
HAVING COUNT(*) > 1 
) 
4

당신은

;WITH CTE AS 
(
SELECT *, 
     COUNT(*) OVER (PARTITION BY OrigId) AS C 
FROM YourTable 
) 
SELECT ID, 
     OrigId 
FROM CTE 
WHERE C >1 
+0

+1 정확히 (빼기 형식) :-) – xanatos

0
select * 
from selecttest 
where origid in 
(
    select origid 
    from selecttest 
    group by origid 
    having COUNT(*) > 1 
) 
+1

7 분 전에 게시 된 @ msmucker0527의 답변과 다른 점은 무엇입니까? –

+0

@MartinSmith 그렇지 않습니다. 나는 그의 글을보기 전에 그 글을 쓰고 있었다. 네가 원하면 내가 지울 수있어. –

+0

하위 쿼리 – msmucker0527

관련 문제