oracle 需要根据单个列的分组查找SQL结果,以确定列是否有任何不同的值

6rvt4ljy  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(82)

enter code here我在Oracle中有一个类似下面的表。
| 部门ID| col1| col2| col3|
| --|--|--|--|
| 490201 |P4520| ABC1| 8000643 |
| 490201 |P4520| ABC1| 7000640 |
| 490201 |P4520| ABC1| 8000643 |
| 490202 |P4520| ZYZ 2| 8000643 |
现在,如果我们看到上面的表,对于department_id 490201有三个条目,我们在col 3(700640)中有不匹配的值,可以有许多行具有department_id,但它们的col 1,col 2,col 3不能有不同的值。因此,对于每个department_id,所有col1col2col3必须一致。
现在我想使用SQL获取所有这些department_id,其中col1col2col3有任何差异。所以最终的输出应该是这样的,因为在上面的示例数据中,只有一个department_id有不匹配的记录。

已编辑:我不是写复杂查询的SQL高手,我写的是简单查询拉取所有记录-select department_id, col1, col2, col3 from meta_test

在Python中运行循环来做一些工作,但数据可能会在未来增加,因此避免使用SQL的循环技术。

of1yzvn4

of1yzvn41#

我是这样理解这个问题的:
样本数据:

SQL> with test (department_id, col1, col2, col3) as
  2    (select 201, 4520, 'abc1', 643 from dual union all
  3     select 201, 4520, 'abc1', 640 from dual union all
  4     select 201, 4520, 'abc1', 643 from dual union all
  5     --
  6     select 202, 4520, 'zyz2', 643 from dual union all
  7     --
  8     select 203, 1234, 'abc1', 200 from dual union all
  9     select 203, 1234, 'abc1', 200 from dual union all
 10     select 203, 1234, 'abc1', 200 from dual
 11    )

查询:col1col2col3中的不同值的数量必须为1;否则,返回department_id

12  select department_id
 13  from test
 14  group by department_id
 15  having count(distinct col1) <> 1
 16      or count(distinct col2) <> 1
 17      or count(distinct col3) <> 1;

DEPARTMENT_ID
-------------
          201

SQL>

相关问题