2013-07-17 3 views
0

간단한 쿼리를 구성하는 데 문제가 있습니다. 카운트 기능을 사용하면 매우 복잡합니다. 여기선택한 레코드의 공통 부분을 선택하는 쿼리

표이다

I는 즉 A = 1 및 2 출력이 표에서, 예를 들어 모든 선택된 A. 그래서 존재 B를 값으로부터 받아야
ID | A | B 
----------- 
1 | 1 | 1 
2 | 1 | 2 
3 | 1 | 3 
4 | 1 | 4 
5 | 2 | 1 
6 | 2 | 2 
7 | 2 | 5 
8 | 2 | 6 
9 | 3 | 1 
10 | 3 | 3 
11 | 3 | 7 

이고 B = 1 2

내 계획은 IN을 사용하여 선택된 A에있는 모든 B를 가져가는 것입니다. 그리고 모든 B를 계수하기 위해 COUNT 함수를 사용하고 선택된 A의 수와 같으면 옳습니다.

초는 루프를 기반으로합니다. 나는 VBA를 사용하므로 첫 번째 질의는 A = 1 인 모든 B를 찾은 다음 이전 단계에서 찾은 모든 B에서 A = 2 등을 찾는다. 그러나 매우 복잡 할 것입니다.

귀하의 의견은 무엇입니까?

답장을 보내 주셔서 감사합니다.

예 :

A in {1,2} => Output: B = {1,2}, 
because B = 1 is with A = 1 for ID = 1 
and B = 1 is with A = 2 for ID = 5 
(similar way with B = 2) 
B = 3 is with A = 1 for ID = 3, but it is not with B for any ID 
A in {1, 2, 3} => Output: B = {1}, 
A in {1, 3} => Output: B = {1, 3}, 
A in {2, 3} => Output: B = {1} 
+0

쉬운 SQL 쿼리 출력을 사용할 수 없습니까? SELECT A from tableX INTERSECT SELECT B FROM tableX? – makciook

+0

아니요, 쿼리 출력은 1,2,3입니다. 열 A와 열 B에 나타나는 번호가 필요하지 않습니다. 내가 선택한 B가 필요합니다. 이 예제에서는 A = 1,2,3을 출력 할 때만 1이됩니다. A = 1,2 => B = 1,2- A = 1,3 => B = 1,3 A = 2,3 => B = 1 그 B마다 선택되어 있기 때문에 – galvanize

+0

에서 아니오, 출력 검색어는 1,2,3입니다. 열 A와 열 B에 나타나는 숫자가 필요하지 않습니다. 나에 의해 선택된 B가 필요합니다. 이 예제에서는 A = 1,2,3을 출력 할 때만 1이됩니다. | A A = 2,3 => B = 1,2,3,A = 1,3 => B = 1,3 | A = 2,3 => B = 1, B가 모두 선택되어 있기 때문에 A – galvanize

답변

0
SELECT b.b 
FROM (SELECT b FROM tablex WHERE A = val1) a 
JOIN (SELECT b FROM tablex WHERE A = val2) b ON a.b=b.b 

안된.

+0

그래,하지만 두 개의 A 값이 있다는 것을 쓰지는 않았다. 더 많은 A 값이있을 수 있습니다. – galvanize

관련 문제