从Oracle到SQL server的SQL分区

从Oracle到SQL server的SQL分区,sql,sql-server,oracle,Sql,Sql Server,Oracle,我有两个表格如下: 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 VARCH

我有两个表格如下:

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 Server(2012版)吗
谢谢

您可以加入这两个表以获取数据。不同之处在于,将在每一行中填充部门

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

您可以联接这两个表以获取数据。不同之处在于,将在每一行中填充部门

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

你还有多远?你有什么问题?你有多远?你有什么问题?