选择仅重复的行,有点

时间:2011-12-20 11:25:30

标签: sql oracle

我真的不确定最好的解释方法,但我们有一个数据库,每个员工都有一个唯一的ID,描述和当前的标志。

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

我正在尝试为每个设置了两个当前标志的情况返回唯一ID,但我甚至不知道从哪里开始。我已经尝试了一个不起作用的子选择,我确定答案很简单,但我刚刚被告知我只有7分钟的时间去做,所以惊慌失措,以为我会问这里。对不起:/

5 个答案:

答案 0 :(得分: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。)

答案 1 :(得分:0)

尝试这样的事情(未经测试!)。您可能需要使用HAVING / COUNT来使其正常工作

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

答案 2 :(得分:0)

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

我想这可以解决问题。使其适应数据库中的字段。

答案 3 :(得分: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

答案 4 :(得分:0)

(未经证实的声明)

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