通过内部联接选择重复列

时间:2013-10-23 08:28:40

标签: sql sql-server

原件:
(C1,C2,C3)
(A,1,R0)
(A,1,R1)
(A,2,R0)
(A,3,R0)
(A,3,R1)
(A,4,R0)
(A,5,R0)
(B,1,R0)

结果:
(C1,C2,C3)
(A,1,R0)
(A,1,R1)
(A,3,R0)
(A,3,R1)

试图显示一个表格,人们可以将数据与相同的“C2”但不同的“C3”进行比较

我尝试使用自己的内部联接

select * from myTable a  inner join myTable b on a.C2 = b.C2 and b.C3 = 'R1' and b.C1 = 'A' and  a.C1 = 'A'

如何缩短此查询的时间?

2 个答案:

答案 0 :(得分:0)

你可以分组&计数C2并在计数大于1时选择 单个c2(如A,2,R0)不会出现 a,1,RO和a,1,r1显示为您的结果

答案 1 :(得分:0)

如果输出中的行B, 1 ,R0是拼写错误,那么您可以使用窗口函数count()来获得所需的输出:

with cte as (
    select *, count(*) over(partition by C1, C2) as cnt
    from Table1
)
select C1, C2, C3
from cte
where cnt > 1

<强> sql fiddle demo