2013-04-03 53 views
2

我有一個表Employees,其字段如下:如何獲得所有列,但必須由組僅2列在SQL查詢

Employee_name,Employee_id,Employee_status,Employee_loc,last_update_time. 

此表沒有任何約束。 我試過了下面的查詢。

select Employee_name, count(1) 
from Employees 
where Employee_status = 'ACTIVE' 
Group by Employee_name,Employee_loc 
having count(Employee_name) > 1 
order by count(Employee_name) desc 

在選擇,我需要得到Employee_id太..可以如何獲得任何一個幫助嗎?

+6

如果有十名員工具有相同的名稱和位置,employee_id'你要哪'?你想要全部10個嗎?只是最小(或最大)?如果你想要所有10個,你想要返回10行嗎? –

+1

你能提供樣品數據和要求的輸出嗎? –

+0

我需要所有10個employee_id。 (理想情況下,它將獲得與Active狀態相同的位置和名稱的員工名單。) – Muthukumar

回答

3

您只需將Employee_id添加到查詢中,並將其添加到group by子句中。 (將其添加到分組中不會對查詢結果產生任何影響,假定每個員工名稱中的每個員工ID都是唯一的)。

如果分組確實有所作爲,這意味着員工姓名和地點的某些組合具有多個與其關聯的ID。因此,您的查詢需要決定返回哪個ID,可能需要使用聚合函數。

+0

我不能,如果我也在組中添加employee_id,那麼它試圖找到所有三個字段(Employeed_name,Employee_loc,Employee_id)的唯一組合。我需要Employee_name和Employee_loc的唯一組合。 – Muthukumar

+0

@ Muthukumar,如果它有所作爲,這意味着'employee_name,empolyee_loc'的某些組合具有多個employee_id。那你怎麼知道你想要哪一個? – 2013-04-03 11:00:39

+0

我需要所有這些employee_ids ..理想情況下,它會得到具有相同的位置和名稱與活動狀態的員工名單 – Muthukumar

1
SELECT EMPLOYEE_NAME, EMPLOYEE_ID, COUNT(1) 
FROM 
EMPLOYEES 
WHERE 
EMPLOYEE_NAME IN 
(
SELECT EMPLOYEE_NAME 
FROM EMPLOYEES 
WHERE Employee_status = 'ACTIVE' 
GROUP BY Employee_name,Employee_loc 
HAVING COUNT(*) > 1 
) 
GROUP BY EMPLOYEE_NAME, EMPLOYEE_ID 
+0

偉大..多數民衆贊成酷。現在爲每個employee_name,我有多行。我只需要通過更新時間獲取最新的一個?有可能得到那個? – Muthukumar

+0

我們需要在外部查詢中的Employee_status,因爲它再次拉動所有狀態的員工。 – Muthukumar