-1
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

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

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

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

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

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

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

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

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

4

1 回答 1

2

试图通过所有逻辑,我认为你想要 A 列和 B 列的值都不同的所有行。查看记录是否不同的一种简单方法是查看最小值和最大值。而且,您可以使用分析函数来做到这一点:

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)

您的示例数据没有任何实际重复项,因此我认为 acount(distinct)没有必要。A您的规则没有说明只出现一次时要做什么。此版本将过滤掉这些行。

于 2013-05-06T16:11:19.077 回答