假设我的 Oracle DB 中有一个如下所示的表:
COL_A COL_B COL_C COL_D .... COL_XXX
A 1 2 1 ....
A 1 2 2 ....
A 1 2 3 ....
A 2 3 4 ....
B 1 2 5 ....
B 1 2 6 ....
B 1 2 7 ....
B 4 2 8 ....
B 1 4 9 ....
C 1 2 10 ....
C 1 2 11 ....
C 1 2 12 ....
C 1 2 13 ....
C 1 2 14 ....
而且我只想找到COL_A
相同和COL_B
不同的记录,COL_C
而不管表中的所有其他列(因此不能只Distinct
在我的 SQL 中使用子句)并忽略所有值都是的任何记录的所有值都相同COL_A
(在此示例中,当= "C"时, COL_B
&的所有值都相同)。COL_C
COL_A
(换句话说 - 仅返回匹配的COL_B
/COL_C
值至少存在一个差异的值,COL_A
而不管表的其他行如何。)
所以,我希望我的结果集是:
COL_A COL_B COL_C
A 1 2
A 2 3
B 1 2
B 4 2
B 1 4
因此,我编写的 SQL 如下所示:
Select b.* FROM
(
Select a.*, COUNT(a.COL_A) OVER(PARTITION BY a.COL_A) as CNT FROM
(
select DISTINCT COL_A, COL_B, COL_C from MyTable) a
) b
WHERE
b.CNT > 1
现在,这可行,但我想知道是否有更好/更有效的方法来获取这些数据?
谢谢!!!