2014-09-19 3 views
0

Microsoft Access에서 작업 쿼리를 작성하고 있습니다. Raw 테이블은 다음과 같습니다.SQL - 여러 그룹 By 문 개수가

ColA | ColB

aa | x

aa | y

bb | x

bb | x

해결하려고하는 문제는 다음과 같습니다. A 열의 각 고유 값에 대해 B 열의 고유 값 수가 얼마입니까?

aa | 2

bb | 1

나는 한 단계 더 가져 가서 만을 선택하고 싶습니다 그래서 계수 = 1 :

BB | 1

이 유일한 결과입니다.

나는 이것을 달성하기 위해 지나치게 복잡한 서브 쿼리로 생각하는 것을 발견했지만, 누군가에게 좀 더 우아한 해결책이 있기를 바랍니다.

감사

답변

1

B의 하나 개의 값이 A의 값을 선택하려면 사용할 수 있습니다

select t.A 
from mytable as t 
group by t.A 
having min(t.B) = max(t.B); 

이 무시를 중복을 고려할 때 NULL 값. 필요한 경우이를 고려할 수 있습니다. 또한 항상 1이기 때문에 카운트가 중복되는 것처럼 보입니다.

+0

숫자가 숫자 2 이외의 값일 경우 어떻게됩니까? 하위 쿼리가없는 유사한 쿼리가 있습니까? – user1825257

+0

@ user1825257 . . Access가'count (distinct) '를 지원하지 않기 때문에 어려워진다. 이 경우 하위 쿼리가 필요할 것이라고 생각합니다. 그것은 단지 다른 관계형 데이터베이스에 대해서도 쉽습니다. –

0

내가 생각 해낸 해결책은 다음과 같습니다

SELECT X.A, COUNT(X.B) 
FROM (
     SELECT D.A, D.B 
     FROM MY_TABLE as D 
     GROUP BY D.A, D.B 
    ) AS X 
GROUP BY X.A 
HAVING COUNT(X.B) = 1