2017-08-01 6 views
-7

部門ごとに指定された従業員を探すにはどうすればいいですか?1つのクエリで部門ごとに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

の一意の各値のためにそれらのすべてを一覧表示するようにしてください、それは次の注意 – Tanner

+2

を取得する方法はありませんが、私たちをご提示くださいあなた自身でこの質問に答える努力をしています。私たちはあなたのコードを書くためのものではありませんが、自分で解決しようとしている問題を解決するのに役立ちます。 – Tanner

+0

部門ごとの他の役割よりも高い役割を明確に指定する必要があります。たとえば、 'DBA'と' PROGRAMMER'は同じですか? – lad2025

答えて

0

あなたは条件付き順位/オーダーを探しています。 order by caseステートメントに注意してください。あなたはのあなたの定義に従って、desigの注文を行うためにこのステートメントを完了する必要があります。です。私は最初の3のためのいくつかの仮定をしたが、ちょうどあなたのポストにCAPSを削除してください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 
関連する問題