2015-10-29 43 views
1

我有如下兩個表:SQL - 分區的 - 從甲骨文到SQL服務器

create table emp 
    (empno  NUMBER(4) constraint E_PK primary key 
    , job  VARCHAR2(8) 
    , deptno  NUMBER(2) default 10 
) ; 
create table departments 
    (deptno NUMBER(2)  constraint D_PK primary key 
    , dname VARCHAR2(10) 
) ; 

在Oracle中,我有一個查詢,以顯示與各部門的這些位置標題全體員工

select d.dname as department 
    ,  e.job as job 
    ,  e.ename as emp 
    from emp e 
     PARTITION BY (JOB) 
     right outer join 
     departments d 
     using (deptno) 
    order by department, job; 

而結果:

DEPARTMENT JOB  EMP 
---------- -------- -------- 
ACCOUNTING Designer Chris 
        Peter 
      Manager Mike 
      Tester null 
      TRAINER null 
HR   Designer 
      Manager 
      Tester 
      TRAINER 
SALES  Designer Black 
      Manager Jane 
      Tester Mary 
        Jack 
        Wil 
        Take 
      TRAINER null 
TRAINING Designer Jane 
      Manager null 
      Tester null 
      TRAINER Fake 
        Smart 
        Tom 
        Ana 

我可以這樣查詢轉換爲SQL服務器(2012年版) 謝謝

+0

多遠有什麼?你有什麼問題? –

回答

0

你可以加入這兩個表來獲取數據。不同之處在於該部門將填充在每一行中。

SELECT 
    d.dname AS Department 
    ,e.Job 
    ,e.ename AS Emp 
FROM 
    departments d 
    LEFT OUTER JOIN emp e ON d.deptno = e.deptno 
ORDER BY 
    d.dname 
    ,e.Job 
    ,2.ename 

要解決這個問題,你將不得不調整了一下:

SELECT 
    CASE WHEN RowNo = 1 THEN Department ELSE '' END AS Department 
    ,Job 
    ,Emp 
FROM 
    (SELECT 
     d.dname AS Department 
     ,e.Job 
     ,e.ename AS Emp 
     ,ROW_NUMBER() OVER (Partition By d.deptno ORDER BY e.Job,e.ename) RowNo 
    FROM 
     departments d 
     LEFT OUTER JOIN emp e ON d.deptno = e.deptno 
    ) Result 
ORDER BY 
    Result.RowNo