2013-12-22 56 views
1

我有EMP表進行排序..
伊諾的ename工資deptmentid
101亞歷2000 10如何Employee數據,基於部門計數

喜歡我有1000名員工的數據,有23個不同的部門..現在我的要求是以這樣的方式對數據進行排序,即哪個部門的數量最高。的員工..

例如,部門50有45名員工(所有部門中最高),那麼這45名員工應該列在第一位。部門-12有3名員工,那麼這3名員工應該被列在最後的聘用表..

+0

獲取這些簡歷。我認爲職業生涯需要 –

回答

0
SELECT Eno, Ename, Salary, E.deptmentid 
FROM EMP E INNER JOIN 
       (SELECT deptmentid, COUNT(Ename) TotalEmps 
       FROM EMP 
       GROUP BY deptmentid) Sub 
ON E.deptmentid = Sub.deptmentid 
ORDER BY TotalEmps DESC 
+0

我還有一個問題,我不能使用「獨特」,而我加入3桌? – user3116746

+0

@ user3116746是的,無論您要加入多少個表,您都可以使用Distinct,它將只返回不同的值。如果答案幫助你,請接受答案:) –

+0

是不是可能的Row_Number()和不同的查詢? – user3116746

0

嘗試這樣的事情,

Declare @Emp table (Eno int, Ename varchar(50), Salary int, deptmentid int) 

insert into @Emp values(1,'cvxcv',3,45),(2,'uyyudfdf',3,45),(3,'hhgcvxcv',3,45),(4,'wewecvxcv',3,46) 
,(5,'sscvxcv',3,46),(6,'nmmcvxcv',3,47),(7,'erewr',3,47) 

select *,dense_rank()over(order by deptmentid)rn from @Emp 
0

這是使用窗口功能的好機會:

select e.* 
from (select e.*, count(*) over (partition by departmentmentid) as DepartmentCount 
     from emp e 
    ) e 
order by DepartmentCount desc, DepartmentId; 

請注意按DepartmentId排序以及計數。如果兩個部門的人數相同,那麼這將使部門之間的員工聚集在一起。

您也可能會喜歡:

select e.*, row_number() over (partition by departmentid order by newid()) as CounterInDepartment 
. . . 

此列舉每個部門內的員工。

0
select employee.name, employee.job, employee.deptmentid, 
    count(*) over(partition by deptmentid) as [count] 
from EMPLOYEE 
order by [count] desc, deptmentid 
+0

謝謝alain R – user3116746