从两列中选择非不同的行
Posted
技术标签:
【中文标题】从两列中选择非不同的行【英文标题】:Select non distinct rows from two columns 【发布时间】:2013-07-22 23:49:40 【问题描述】:我的问题与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
基本上,就像上面的问题一样,只有在唯一性由两列而不是一列确定的情况下,才删除所有唯一条目。我已经尝试了对上述答案的各种调整,但都无法正常工作。
【问题讨论】:
【参考方案1】:您使用的是 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(*)
的这种使用是作为一个窗口函数。它正在计算具有相同 A
和 B
值的行数。最后的where
只选择具有多个条目的行。
【讨论】:
像魅力一样工作!谢谢!对 OVER 和 PARTITION BY 语句的作用有任何说明吗? @1215drew-NWR-。 . .这些用于窗口函数,非常有用。数据库文档很好地涵盖了这些(至少 SQL Server 和 Oracle)。它们是标准的一部分并且随时可用(例如 SQL Server、Oracle、Postgres、DB2)。我知道我在“使用 SQL 和 Excel 进行数据分析”一书中介绍了它们。基本 SQL 书籍通常不涉及此主题。 谢谢,我会深入研究一下文档,也许看看你的书。【参考方案2】: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
)
应该够快了。
输出:
|一个 |乙| C | ------------- | 2 | 1 | 2 | | 2 | 1 | 3 | | 2 | 3 | 5 | | 2 | 3 | 6 | | 3 | 1 | 7 | | 3 | 1 | 9 |这里是SQLFiddle演示
【讨论】:
以上是关于从两列中选择非不同的行的主要内容,如果未能解决你的问题,请参考以下文章