2012-02-16 2 views
2

그래서 세 개의 열이있는 테이블이 있습니다 - col1, col2col3입니다. 나는 col2col3의 조합을 가진 행을 공유하는 col1의 값을 선택해야합니다. 이상적인 세상에서 나는 다음과 같이 쓸 것입니다 :"받는 방법 (DISTINCT (col1, col2))"

SELECT col1 FROM table 
GROUP BY col1 
HAVING COUNT(DISTINCT(col2, col3)) = 1 

현실 세계에서 어떻게 그럴 수 있을까요?

지금까지 나는 col1col2col1col3에 의해 두 그룹의 결과를 얻었습니다. 또는 세 그룹 모두를 그룹화 한 다음 해당 그룹을 col1으로 분류하십시오. 불행히도 나는 (아주) 다른 수를 얻는다.

데이터베이스는 SQL 서버에 2005

+0

, 당신은 하나의 COL2 또는 COL3 값이있는 곳과 일치 싶어 당신이 경우 상관이야 각 행/여러 행 중 하나가 있지만 다른 행에 있습니까? 몇 가지 샘플 데이터를 제공하면 도움이 될 것입니다. – kaj

+0

col1은 col2 또는 col3과 같지 않습니다. 테이블이 수복자에게 저녁 식사를 알리는 지 상상해보십시오. col1은 이름이고, col2는 restorant이고 col3은 약한 날입니다. 나는 단 한 명의 수복자에게서 항상 외식하는 사람들에게만 관심이 있습니다. – zzandy

+0

그 이유는 내 자신의 답변을 철회하기 위해 투표 한 이유입니다. 질문이 명확하지 않고 응답이 작동하지 않습니다. 그러나 한 사람이 매일 밤 다른 레스토랑에서 식사를한다면 결과 세트에 몇 번이나 반품해야합니까? – kaj

답변

7
SELECT col1 
FROM table 
GROUP BY col1 
HAVING MAX(col2) = MIN(col2) AND MAX(col3) = MIN(col3) 

더 복잡한 :

SELECT col1 
FROM 
    (
    SELECT 
     col1, 
     ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col2, col3) as rn 
    FROM table 
    ) T 
GROUP BY col1 
HAVING MAX(rn) = 1 
-1
select * 
from mycols 
where col1 in (
    select max(col1) 
    from mycols 
    group by col2, col3 
    having count(col1)=1 
) 
관련 문제