我想查找具有列A,B和C的相同值的表中的行。 C但列D的值不同。Oracle查詢查找表中具有列A,B和C相同值但列D不同的行的行
我的意思是a列中的值對於A列是相同的,而B列中的值是相同的。等
如果你有一個僱員表,我需要與同一部門,同一主管員工行,不同的地點
我想查找具有列A,B和C的相同值的表中的行。 C但列D的值不同。Oracle查詢查找表中具有列A,B和C相同值但列D不同的行的行
我的意思是a列中的值對於A列是相同的,而B列中的值是相同的。等
如果你有一個僱員表,我需要與同一部門,同一主管員工行,不同的地點
如果我猜中了:
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)
如果這些列無效/可選,那麼你可能想使用NVL或任何其他的NULL處理函數。由於一個NULL值不等於另一個。
如果你只是想找到哪個部門/主管組合有多個位置,那麼你可以使用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帶有組成數據。
如果您在問題中包含了實際的表格和示例數據,那對您來說會更有意義。
帶子查詢的查詢適用於我。謝謝。 – OPost 2014-09-25 14:46:03
...'WHERE a = b AND b = c AND a <> d' – 2014-09-25 13:13:19
我的意思是a列中的值與a列中的值相同,b列中的值是相同的。等等。如果你有一個員工表,我需要有僱員擁有同一個部門,同一個主管,不同地點的行。 – OPost 2014-09-25 13:31:44
@OPost你應該在提供其他細節時編輯你的問題。我已經爲你做了。請檢查該更改。 – 2014-09-25 13:35:11