2011-12-20 104 views
0

我真的不确定最好的方式来解释这一点,但我们有一个数据库,每个员工都有一个唯一的ID,描述和当前标志。选择只有重复的行,kinda

SELECT COUNT("Current_Flag"), 
    "Employee_Number" 
FROM "Employment_History" 
WHERE "Current_Flag" = 'Y' 
GROUP BY "Employee_Number" ; 

我试图返回的唯一ID,他们有两个电流设置标志每一个案件,但我甚至不知道从哪里开始。我试过了一个没用的子查询,我敢肯定,答案很简单,但我刚刚被告知我只有7分钟的时间去做,所以感到恐慌,我想我会在这里问。对不起所有:/

+0

向我们展示表! – fge 2011-12-20 11:28:00

+0

在任何人都可以回答之前,您需要发布当前的模式(即表格是什么样的!)。 – 2011-12-20 11:28:31

+0

对不起我现在更新了 – 2011-12-20 11:35:18

回答

3

添加HAVING子句当前的查询 - 就像这样:

select count("Current_Flag"), 
     "Employee_Number" 
from "Employment_History" 
where "Current_Flag" = 'Y' 
group by "Employee_Number" 
having count("Current_Flag") >= 2 

(更改条件=2如果只想正是 2场比赛。)

+0

很多伟大的回复和建议,非常感谢你 - 但只是想说我已经试过这个来自马克,它的工作完美,非常感谢你先生! (有趣的是,我上面的初始代码实际上是正确的,只是没有任何重复!尽管如此,仍然是一个非常有用的练习)再次感谢 – 2011-12-20 11:43:25

0

尝试像这样(未经测试!)。你可能有玩弄HAVING/COUNT来得到它的工作

SELECT unique_id, description, flag FROM table GROUP BY unique_id HAVING COUNT(unique_id) > 1 
+4

我没有downvote(我希望downvoters会留下解释),但描述和标志需要在Oracle中汇总/省略。此外,你需要限制这个current_flag是Y. – 2011-12-20 11:41:02

+1

这很烦人!但这是一个很好的观点,我在提供任何模式/ SQL之前发布了我的答案,这就是为什么它非常含糊。 – fin1te 2011-12-20 11:43:36

0
select employee_name, count(employee_name) as cnt 
group by employee_name 
where cnt>1 

我想这会做的伎俩。将其调整到数据库中的字段。

+4

我没有downvote(我希望downvoters会留下解释),但是你不能对同一个查询中的聚合值做一个where子句 - 这需要是一个having子句,或者你需要将where子句放入一个主查询和剩余的查询转化为一个子查询。此外,您需要将此限制在current_flag为Y的地方。 – 2011-12-20 11:43:27

+0

同意,谢谢您的洞察力。 – 2011-12-20 11:51:53

0

自连接表只返回其中2个“标志”相同的行,排除匹配UniqueID的行,返回在标志上具有匹配的ID的实例。

Select A.ID 
from table A 
INNER JOIN table B 
on A.Flag1=B.Flag1 and A.Flag2=B.Flag2 
Where A.ID <> B.ID 
0

(UNTESTED STATEMENT)

SELECT Id FROM TABLE1 T1 WHERE T1.Id NOT IN(
SELECT Id FROM TABLE2 T2 WHERE (T1.Flag1 = T2.Flag1) AND (T1.Id <> T2.Id))