2017-08-01 38 views
-7

如何找到每個部門的最高指定員工?在單個查詢中選擇每個部門的TOP指定員工

我有這樣的表和值:

CREATE TABLE [dbo].[#deptartment] 
(
    [emp_id] [INT] IDENTITY(1, 1) NOT NULL, 
    [dept_name] [VARCHAR](100) NULL, 
    [emp_name] [VARCHAR](50) NULL , 
    [desig] [VARCHAR](100) NULL 
) 
ON [PRIMARY] 
GO 

INSERT INTO #deptartment VALUES ('IT','JAFFERY','DIRECTOR') 
INSERT INTO #deptartment VALUES ('DEVELOPMENT','CORBIT','PROGRAMMER') 
INSERT INTO #deptartment VALUES ('DEVELOPMENT','CHANDRA','DBA') 
INSERT INTO #deptartment VALUES ('IT','KEVIN','MANAGER') 
INSERT INTO #deptartment VALUES ('IT','ROBERT','SUPERVISOR') 
INSERT INTO #deptartment VALUES ('QA','NOMAN','ANALYST') 
INSERT INTO #deptartment VALUES ('ADMIN','CORE','RECEPTIONIST') 
INSERT INTO #deptartment VALUES ('QA','MADDEN','ANALYST') 
INSERT INTO #deptartment VALUES ('IT','NORRIS','TECHNICIAN') 
INSERT INTO #deptartment VALUES ('ADMIN','PATRICK','CLERK') 
INSERT INTO #deptartment VALUES ('DATA','SONJA','SUPERVISOR') 
INSERT INTO #deptartment VALUES ('QA','GEORGE','MANAGER') 
INSERT INTO #deptartment VALUES ('ADMIN','EMILLY','MANAGER') 
INSERT INTO #deptartment VALUES ('QA','PATRICK','TESTER') 
INSERT INTO #deptartment VALUES ('DEVELOPMENT','ABDUL','MANAGER') 
INSERT INTO #deptartment VALUES ('DATA','PATRICK','CLERK') 
INSERT INTO #deptartment VALUES ('ADMIN','GEORGE','CLERK') 
INSERT INTO #deptartment VALUES ('DEVELOPMENT','YURIY','SUPERVISOR') 
INSERT INTO #deptartment VALUES ('DATA','GRAHAM','OPERATOR') 

這裏是我試過查詢:

SELECT D1.dept_name, D1.desig, 
    RANK() OVER(Partition BY D1.DESIG ORDER BY D1.dept_name,D1.DESIG 
    DESC) 
    AS RANKNUMBER 
    FROM #deptartment D1 GROUP BY D1.desig, D1.dept_name 
    ORDER BY RANKNUMBER DESC 
+1

每個唯一值,請刪除您的文章的CAPS,這不是讓下一個關注 – Tanner

+2

的方式,請告訴我們你爲自己回答這個問題所做的努力。我們不在這裏爲您編寫代碼,但我們將幫助您解決您嘗試自行解決問題時遇到的問題。 – Tanner

+0

您需要明確指定哪個角色高於其他每個部門。例如'DBA'和'PROGRAMMER'是否相等? – lad2025

回答

0

您正在尋找有條件的排名/訂單。請注意0​​聲明。您需要完成此聲明,以根據您的定義頂部指定員工的順序排列desig。我做了一些假設前三,但只是一定要列出所有爲desig

select 
    x.emp_id 
    ,x.dept_name 
    ,x.emp_name 
from(
    select 
     d.emp_id 
     ,d.dept_name 
     ,d.emp_name 
     ,row_number() over (partition by d.dept_name order by case 
                   when d.desig = 'DIRECTOR' then 1 
                   when d.desig = 'SUPERVISOR' then 2 
                   when d.desig = 'OPERATOR' then 3 
                   --etc... 
                   end) as RN 
    from #deptartment d) x 
where x.RN = 1 
相關問題