2010-11-30 4 views
0

2008 SQL Server의 다음 두 테이블 고려 :얻기 수

표 하나 INT 필드가 있습니다 또한 하나 개의 INT 필드가 TERM1

표 2 : Term2. (예, 상상력이 부족합니다.)

. , 3, 4, 5, 5 :

이의 내가 표에 다음 값을 삽입한다고 가정 해 봅시다 : 1, 2, 5, 5, 6, 7

그리고 표 2에 다음 값을 삽입 8, 9

.

두 테이블에 공통된 용어를 찾는 쿼리를 실행하고 싶습니다.이 두 테이블을 페어링해야합니다. 중복이있을 때 (이 경우 5와 5가 있음), 발견 된 각 쌍마다 하나의 행이 있어야합니다. 다른 말로하면, 두 쌍의 5 쌍이을 공통으로 사용되는 두 개의 용어로 반환하고 싶습니다.

어떻게해야합니까? Table1과 Table2에서 간단한 내부 조인을 수행하면 네 개의 쌍이 반환됩니다.

.

편집 :이 부분을 명확하게해야합니다. 중복이 아닌 모든 공통된 가치에 관심이 있습니다. 문제는 복제본을 다루는 것이 더 어렵다는 것입니다.

그래서 표 1에서 다음 값을 삽입하는 경우, 1, 2, 5, 5, 5, 6, 7,8

그리고 표 2에서 다음 값을 삽입 : 3, 4, 5 , 5, 5, 6, 9, 0

그런 다음 5, 5, 5, 6을 공통 용어로보고 싶습니다.

+0

편집 KM의 관찰에 비추어 샘플 데이터. 2는 두 서열 모두에 공통적 인 것은 아니다. –

답변

0
DECLARE @Table1 TABLE (Term1 int) 
INSERT INTO @Table1 VALUES (1),(2),(5),(5),(5),(6),(7),(8) 
DECLARE @Table2 TABLE (Term2 int) 
INSERT INTO @Table2 VALUES (3),(4),(5),(5),(5),(6),(9),(0) 

;WITH T1 AS 
(
SELECT Term1, ROW_NUMBER() OVER (PARTITION BY Term1 ORDER BY (SELECT 0)) RN1 
FROM @Table1 
), 
T2 AS 
(
SELECT Term2, ROW_NUMBER() OVER (PARTITION BY Term2 ORDER BY (SELECT 0)) RN2 
FROM @Table2 
) 
SELECT T1.Term1 
FROM T1 JOIN T2 ON T1.Term1=T2.Term2 AND T1.RN1=T2.RN2 

출력

Term1 
----------- 
5 
5 
5 
6 
+0

고마워, 마틴. 'PARTITION BY'... 참으로 유용한 절! –