2011-12-05 2 views
0

SQL Server 2005에서 필터링 작업을 수행하려고합니다.다른 SQL 서버에 나타나는 한 테이블의 행을 필터링하십시오.

예. 현재 테이블과 거부 테이블이라는 두 개의 테이블이 있다고 가정 해 봅시다.

Current = 1, 2, 3, 4, 5, 1, 2 
Reject = 2, 3, 4 

Current \ Reject = 1, 2, 5 

두 테이블은 값을 공유합니다. 필자는 기본적으로 이러한 공유 값을 빼서 새 테이블에 배치하려고합니다.

이것은 시도했지만 작동하지 않았습니다. (A는 일치시킬 열입니다).

select * from Current left join 
       Reject on csrp.a = rp.a 
     group by Current.a, Reject.a 
     having count(Current.a) > count(Reject.a) 

아래에 유의해야 할 사항은, 생략해서는 안되지만, 요소 2는 필터링되었습니다.

enter image description here

마틴 스미스의 대답은이 경우 근무!


편집

좋아, 그래서 조금 더를 복잡하게 할 수 있습니다. 이전과 똑같은 상황이 있다고 가정 해 봅시다. 이번에는 단 하나 대신 3 개의 열을 일치시켜야합니다.

Current = (1, 2, 3), (2, 3, 4), (2, 3, 4), (4, 5, 6), (7, 8, 9), (1, 2, 3) 
Reject = (2, 3, 4), (4, 5, 6), (7, 8, 9) 

Current \ Reject = (1, 2, 3), (2, 3, 4) 
+0

는 네, 맞습니다. 요소 2는 현재에는 두 번 나타나지만 거부에서는 한 번만 나타납니다. 따라서 요소 2가 내 결과에 나타나기를 바랍니다. 말이 돼? –

답변

1
WITH [Current](a, b, c) 
    AS (SELECT 1, 2, 3 UNION ALL 
     SELECT 2, 3, 4 UNION ALL 
     SELECT 2, 3, 4 UNION ALL 
     SELECT 4, 5, 6 UNION ALL 
     SELECT 7, 8, 9 UNION ALL 
     SELECT 1, 2, 3), 
    Reject(a, b, c) 
    AS (SELECT 2, 3, 4 UNION ALL 
     SELECT 4, 5, 6 UNION ALL 
     SELECT 7, 8, 9), 
    T(RN, a, b, c) 
    AS (SELECT ROW_NUMBER() OVER (PARTITION BY a, b, c ORDER BY (SELECT 0)), 
       a, 
       b, 
       c 
     FROM [Current] 
     EXCEPT 
     SELECT ROW_NUMBER() OVER (PARTITION BY a, b, c ORDER BY (SELECT 0)), 
       a, 
       b, 
       c 
     FROM Reject) 
SELECT DISTINCT a, 
       b, 
       c 
FROM T 
+0

ROW_NUMBER()에 ORDER BY 절이 필요하다는 말입니다. –

+0

@TommyFisk - 편집을 참조하십시오. –

+0

좋아요, 질문에이 질문을하지는 않았지만 B와 C처럼 두 개의 열을 기준으로 필터링해야한다고 가정 해 봅시다 a, b, c로 분할 한 다음 선택해야할까요? ? –

관련 문제