Sql server常用的分組聚合應用很廣泛,但有時在展示時我們需要用到類似excel透視的效果;
那么如何達到這種透視效果呢?
如下例:
以Oracle經典庫scott為例:
我們要求展現每個部門下(deptno)、各職(job)的所有綜合工資是多少,正常情況下我們會使用如下查詢
1 select deptno,job,SUM(sal) as sum_sal 2 from emp 3 group by deptno,job
效果如下:
但是如果我們要求deptno縱向排列,Job橫向排列應該如何呢?
常規的寫法如下:
1 --常規透視 2 select deptno, 3 sum(case when job='ANALYST' then sal else 0 end) as ANALYST, 4 sum(case when job='CLERK' then sal else 0 end) as CLERK, 5 sum(case when job='MANAGER' then sal else 0 end) as MANAGER, 6 sum(case when job='PRESIDENT' then sal else 0 end) as PRESIDENT, 7 sum(case when job='SALESMAN' then sal else 0 end) as SALESMAN 8 from emp 9 group by deptno
得到的結果如下:
習慣表格操作的或許會感覺這樣排列更加直觀一點;
當然這是常規的寫法,Sql Server 自帶的Pivot方法也可以實現:不過對版本的要求至少是2008
如下:
1 --pivot透視 2 select deptno,ANALYST,CLERK,MANAGER,PRESIDENT,SALESMAN 3 from 4 (select deptno,job,sal from emp)as a 5 pivot (sum(sal) 6 for job 7 in (ANALYST,CLERK,MANAGER,PRESIDENT,SALESMAN)) as b
效果同上
但是需要注意一點,如果這個查詢的行和列相反(即:deptno橫向,job縱向),
因為deptno值全是數值,那么在書寫的時候要注意一下,加上"[]",
如下
1 select job,[10],[20],[30] 2 from 3 (select job,deptno,sal from emp) a 4 pivot (sum(sal) 5 for deptno 6 in ([10],[20],[30]) )b
效果如下:
這個是透視,逆透視--未完待續…………