-1

我有来自 SQL 查询的下表(我们称之为“xxx”)。从“xxx”我希望找到所有行,其中任何给定行都有对应的行,其中 A 列相同,B 列不同,C 列相同,D 列相同 - 匹配所有要求。所以在下面的一组行中,我只想要最后两行,在这两行中,两行的 D 相同,C 相同,B 不同,A 相同。退货最简单的方法是什么?

A           B       C       D
100000600   04080   127 640288
100000600   04080   127 641034
100000700   04080   127 659175
100000700   04095   128 664697
100000700   18192   128 676507
100000700   04095   128 676507
4

1 回答 1

1

这似乎是该exists子句的一个很好的应用:

select *
from xxxx x1
where exists (select 1
              from xxxx x2
              where x2.a = x1.a and
                    x2.b <> x1.b and
                    x2.c = x1.c and
                    x2.d = x1.d
             )

戈登,我为劫持你的答案道歉。我无法提交我的答案,因为在我编辑它时问题已关闭。

带有 EXISTS 子句的查询将返回指定的结果集。获得等效结果的另一种方法是使用内联视图,获取存在多个 B 值的 A、C 和 D 列,然后将其连接到表中,以返回行。例如

SELECT t.A
     , t.B
     , t.C
     , t.D
  FROM ( 
         SELECT r.A
              , r.C
              , r.D
           FROM mytable r
          GROUP
             BY r.A
              , r.C
              , r.D
         HAVING COUNT(DISTINCT r.B) > 1
       ) s
  JOIN mytable t
    ON t.A = s.A
   AND t.C = s.C
   AND t.D = s.D
 ORDER
    BY t.A, t.C, t.D, t.B
于 2013-07-08T16:03:20.413 回答