2011-09-19 3 views
0

필자가 작성하려고하는 쿼리에 대한 정보를 찾고자했지만 아이디어가 떠오르지는 않았다. 나는 내가해야 할 일에 대해 일반적인 생각을 가지고 있다고 생각하지만, 그 작은 추진력을 놓치고있는 중입니까?독점적으로 하나의 유형 인 레코드를 반환하는 SQL 쿼리

내가하려고하는 것은 '유형'이 독점적으로 하나의 값인 레코드 만 가져 오는 쿼리를 작성하는 것입니다. 찾고자하는 유형 중 몇 가지가있을 수있는 위치를 거부하지만 다른 하나는 전체 세트를 무효화합니다 .

나는 그런 종류의 혼란 실현, 그래서 여기에 예입니다 :

LinkId LinkType 
1234 A 
1234 B 
1235 A 
1236 A 
1236 A 

의이 링크 유형 'A'의 기록은 내가 관심이 무엇을 말합시다 linkID를 만 'A'기록이있는 경우, I를. 원하는. A 레코드와 다른 값의 레코드가있는 경우 (1 또는 많은 레코드가 중요하지 않음) 혼자 두십시오. 예를 들어 위의 예제 테이블에서 ID 1234는 출력되지만 1235와 1236은 유효합니다.

지금 내가

LinkId LinkType 
1234 A 
1234 B 
1235 A 
1236 A 

처럼 무언가로 테이블을 축소

SELECT LinkId, LinkType 
FROM dbo.ExampleTable 
GROUP BY LinkId, LinkType 

처럼 뭔가를 할 수 있습니다 알고 있지만 나는이 붙어있어. 여기에 HAVEING 절을 사용해야하며 숫자를 확인하기 위해 COUNT 또는 다른 것을 사용해야 할 것으로 추측됩니다.하지만 그 부분을 함께 가져올 수없는 것 같습니다.

검색 팁에 대한 도움말이나 의견이 있으십니까?

답변

2

T-SQL은

SELECT * 
FROM ExampleTable 
WHERE LinkID NOT IN 
(
    SELECT LinkID 
    FROM ExampleTable 
    WHERE LinKType != 'A' 
) 

당신이 원하는 일을해야한다. 그래서 때문에, 다음

당신은 그룹에 의해 할 수 없습니다를 (그래서에만 바와 같이 표시됩니다)하지 그 이전 선택에 LinkIDs의 목록을 잡아, A 형의 아닌 LinkIDs의 목록을 잡아 LinkID로 그룹화 할 때 LinkType에 대한 정보가 손실되므로 SubQuery가 유일한 방법입니다 (이 상황에서 가장 명확합니다).

+0

글쎄, 내가 생각했던 것보다 쉽게 ​​그렇게 만들었다. 고마워요! – benjamin

+0

문제가 없습니다. 다행히 도와 줬어 :) –

관련 문제