2011-12-20 105 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))