Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 筛选一个表中出现在另一个sql server中的行_Sql Server_Sql Server 2005 - Fatal编程技术网

Sql server 筛选一个表中出现在另一个sql server中的行

Sql server 筛选一个表中出现在另一个sql server中的行,sql-server,sql-server-2005,Sql Server,Sql Server 2005,我正在尝试在SQLServer2005中执行筛选操作 例如。假设我们有两个表,Current和Reject Current = 1, 2, 3, 4, 5, 1, 2 Reject = 2, 3, 4 Current \ Reject = 1, 2, 5 如您所见,这两个表共享值。我基本上只想减去这些共享值,然后将它们放到一个新表中 这是我试过的,但没用。(A是要匹配的列) 请注意,下面的元素2已被过滤掉,即使它不应该被过滤掉 马丁·史密斯的回答对这个案子起了作用 编辑 好吧,让我们把它

我正在尝试在SQLServer2005中执行筛选操作

例如。假设我们有两个表,Current和Reject

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

Current \ Reject = 1, 2, 5
如您所见,这两个表共享值。我基本上只想减去这些共享值,然后将它们放到一个新表中

这是我试过的,但没用。(A是要匹配的列)

请注意,下面的元素2已被过滤掉,即使它不应该被过滤掉

马丁·史密斯的回答对这个案子起了作用


编辑

好吧,让我们把它复杂一点。假设我的情况与以前完全相同,只是这次我需要匹配三列而不是一列

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)

是的,没错。元素2在Current中出现两次,但在Reject中仅出现一次。所以我希望元素2出现在我的结果中。这有意义吗?它是说ROW_NUMBER()需要一个ORDER BY子句。好吧,我知道我在问题中没有问这个问题,但假设我需要根据另外两列进行筛选,比如B和C。我只需要按a、B、C进行分区,然后选择它们吗?@TommyFisk-请编辑您的问题,以提供一个示例来说明您的意思。
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)
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