Sql 使用特定条件查找具有多列的唯一值

Sql 使用特定条件查找具有多列的唯一值,sql,oracle,join,Sql,Oracle,Join,我需要找到具有多列且带有一些附加条件的唯一值。唯一的值是A、B和C列的组合 如果列A只有两行,如记录1和2,列B在两个数据上相同,并且有一个与列C不同的值,那么我不需要这些记录 如果A列只有多行,如记录3到6,具有不同的B列和C列组合,我们希望看到这些值 如果A列有多行,如记录7到8,具有不同的B列和C列组合,我们希望看到这些值 如果列A只有多行,如记录9到11,具有相似/不同的列B和C组合,我们希望看到这些值 如果列A只有多行,如记录12forwards,具有相似的列C和相似或不同的列B,我们

我需要找到具有多列且带有一些附加条件的唯一值。唯一的值是A、B和C列的组合

如果列A只有两行,如记录1和2,列B在两个数据上相同,并且有一个与列C不同的值,那么我不需要这些记录

如果A列只有多行,如记录3到6,具有不同的B列和C列组合,我们希望看到这些值

如果A列有多行,如记录7到8,具有不同的B列和C列组合,我们希望看到这些值

如果列A只有多行,如记录9到11,具有相似/不同的列B和C组合,我们希望看到这些值

如果列A只有多行,如记录12forwards,具有相似的列C和相似或不同的列B,我们不需要这些值

如果像第17行这样的单个值,则不需要显示


尝试了很多,但没有得到确切的答案。非常感谢任何帮助。

尝试了解所有逻辑,我认为您需要a列和B列的值不同的所有行。查看记录是否不同的一个简单方法是查看最小值和最大值。并且,您可以使用分析函数来实现这一点:

ID?  A  B  C
---  -- -- --
 1   J  1  B
 2   J  1  S
 3   M  1  B
 4   M  1  S
 5   M  2  B
 6   M  2  S
 7   T  1  B
 8   T  2  S
 9   C  1  B
10   C  1  S
11   C  2  B
12   N  1  S
13   N  2  S
14   N  3  S
15   Q  1  S
16   Q  1  S
17   Z  1 B

您的示例数据没有任何实际的副本,因此我认为没有必要使用countdistinct。你的规则没有说明当一个事件只出现一次时该怎么办。此版本将筛选出这些行。

看起来您需要使用子查询从表中获取计数查看使用HAVING命令仅获取计数3-11尝试过这一点,但仍有一个或一个条件被忽略…您只需要为子查询中的计数执行此操作,其他过滤器需要在主查询中完成,每个唯一的过滤器集需要在自己的查询中完成。让我来看看ColA、colb或col a和CNo的组合,这将解决问题,因为这将给出从第12行到第14行的所有行。。
select A, B, C
from (select t.*,
             count(*) over (partition by A) as Acnt,
             min(B) over (partition by A) as Bmin,
             max(B) over (partition by A) as Bmax,
             min(C) over (partition by A) as Cmin,
             max(C) over (partition by A) as Cmax
      from t
     ) t
where (Bmin <> Bmax or Cmin <> Cmax)