我想在表格中找到列A,B和C的值相同但列D的值不同。
我的意思是列a中的值对于列A是相同的,列B的值是相同的。等
如果您有员工表,我需要拥有相同部门,同一主管,不同地点的员工的行
答案 0 :(得分:0)
如果我做对了:
select *
from YOUR_TABLE t
where (t.a is not null and t.a = t.b and t.b = t.c and t.a != t.d)
or (t.a is null and t.b is null and t.is null and t.d is not null)
答案 1 :(得分:0)
如果这些列是NULLable / Optional,那么您可能希望使用NVL或任何其他NULL处理函数。由于一个NULL值不等于另一个。
答案 2 :(得分:0)
如果您只是想查找哪个部门/主管组合有多个位置,那么您可以使用group by
和having
:
select department, supervisor, count(distinct location) as locations
from employee e
group by department, supervisor
having count(distinct location) > 1;
如果您想要来自任何这些部门中的行的所有数据,那么可以将其用作子查询,但这意味着要两次点击该表。您可以改为使用分析计数:
select id, department, supervisor, location
from (
select e.*,
count(distinct location)
over (partition by department, supervisor) locations
from employee e
)
where locations > 1
order by id;
...其中id
可以替换为您想要从基础表中的任何字段,或者如果您只想知道涉及哪些位置,则完全省略。
内部查询从表中获取原始数据,并在整个结果集中添加一个列,该列具有该行中部门/主管的(不同)位置数 - 这是分析部分。外部查询然后只筛选出只有一个位置的那些。
Quick SQL Fiddle demo包含补充数据。
如果您在问题中包含了实际的表格和样本数据,那么对您来说会更有意义。