фильтровать строки из одной таблицы, которые появляются на другом сервере SQL - PullRequest
0 голосов
/ 05 декабря 2011

Я пытаюсь выполнить операцию фильтрации в SQL Server 2005.

Пример.Допустим, у нас есть две таблицы, Current и Reject.

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

Ответ Мартина Смита сработал для этого случая!


РЕДАКТИРОВАТЬ

Хорошо, так что давайте усложним это немного больше.Допустим, у меня точно такая же ситуация, как и раньше, за исключением того, что на этот раз мне нужно сопоставить три столбца вместо одного?

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)

1 Ответ

1 голос
/ 05 декабря 2011
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  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...