从两列中选择不同的行

时间:2013-07-22 23:49:40

标签: sql sql-server database

我的问题与Multiple NOT distinct非常相似,只是处理多个列而不是一个。我有一张这样的桌子:

A B C
1 1 0
1 2 1
2 1 2
2 1 3
2 2 4
2 3 5
2 3 6
3 1 7
3 3 8
3 1 9

结果应该是:

A B C
2 1 2
2 1 3
2 3 5
2 3 6
3 1 7
3 1 9

基本上,与上述问题一样,仅删除所有唯一条目,其中唯一性由两列而不是一列确定。我已经尝试过对上述答案的各种调整,但无法使它们起作用。

2 个答案:

答案 0 :(得分:2)

您正在使用SQL Server,因此这比在Access中更容易:

select A, B, C
from (select t.*, count(*) over (partition by A, B) as cnt
      from t
     ) t
where cnt > 1;

count(*)的这种用法是一个窗函数。它计算具有相同值AB的行数。最终where只选择具有多个条目的行。

答案 1 :(得分:1)

EXISTS

的另一种可能解决方案
SELECT a, b, c 
  FROM Table1 t
 WHERE EXISTS 
(
  SELECT 1 
    FROM Table1
   WHERE a =  t.a 
     AND b =  t.b
     AND c <> t.c
)

它应该足够快。

输出:

| A | B | C |
-------------
| 2 | 1 | 2 |
| 2 | 1 | 3 |
| 2 | 3 | 5 |
| 2 | 3 | 6 |
| 3 | 1 | 7 |
| 3 | 1 | 9 |

这是 SQLFiddle 演示