2014-09-25 93 views
0

我想查找具有列A,B和C的相同值的表中的行。 C但列D的值不同。Oracle查询查找表中具有列A,B和C相同值但列D不同的行的行

我的意思是a列中的值对于A列是相同的,而B列中的值是相同的。等

如果你有一个雇员表,我需要与同一部门,同一主管员工行,不同的地点

+3

...'WHERE a = b AND b = c AND a <> d' – 2014-09-25 13:13:19

+0

我的意思是a列中的值与a列中的值相同,b列中的值是相同的。等等。如果你有一个员工表,我需要有雇员拥有同一个部门,同一个主管,不同地点的行。 – OPost 2014-09-25 13:31:44

+0

@OPost你应该在提供其他细节时编辑你的问题。我已经为你做了。请检查该更改。 – 2014-09-25 13:35:11

回答

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) 
0

如果这些列无效/可选,那么你可能想使用NVL或任何其他的NULL处理函数。由于一个NULL值不等于另一个。

0

如果你只是想找到哪个部门/主管组合有多个位置,那么你可以使用group byhaving

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带有组成数据。

如果您在问题中包含了实际的表格和示例数据,那对您来说会更有意义。

+0

带子查询的查询适用于我。谢谢。 – OPost 2014-09-25 14:46:03

相关问题