oracle動(dòng)態(tài)列名 oracle動(dòng)態(tài)的行轉(zhuǎn)列怎么搞?
oracle動(dòng)態(tài)的行轉(zhuǎn)列怎么搞?用union all假設(shè)列名分別為 col1 cola colb...select col1,colafrom tabnamewhere ...union allsel
oracle動(dòng)態(tài)的行轉(zhuǎn)列怎么搞?
用union all
假設(shè)列名分別為 col1 cola colb...
select col1,cola
from tabname
where ...
union all
select col1,colb
from tabname
where ...
union all
select col1,colc
from tabname
where ...
union all
select col1,cold
from tabname
where ...
union all
select col1,cole
from tabname
where ...
union all
select col1,colf
from tabname
where ...
Oracle列轉(zhuǎn)行,行轉(zhuǎn)列?
oracle下可以用函數(shù)decode處理:
select 產(chǎn)品名稱,
sum(decode(季度,"第一季度",銷售額,0)) 第一季度銷售額,
sum(decode(季度,"第二季度",銷售額,0)) 第二季度銷售額,
sum(decode(季度,"第三季度",銷售額,0)) 第三季度銷售額,
sum(decode(季度,"第四季度",銷售額,0)) 第四季度銷售額,
from 表名
group by 產(chǎn)品名稱
Oracle實(shí)現(xiàn)行轉(zhuǎn)換成列的方法?
數(shù)據(jù)表示例:假設(shè)要將name值作為行,course值作為列,轉(zhuǎn)換后效果為:對(duì)應(yīng)的SQL如下:方法1:使用表連接SELECT DISTINCT a.name,(SELECT score FROM grade b WHEREa.name=b.name AND b.course="語文") AS "語文",(SELECT score FROM grade b WHEREa.name=b.name AND b.course="數(shù)學(xué)") AS "數(shù)學(xué)",(SELECT score FROM grade b WHEREa.name=b.name AND b.course="英語") AS "英語"FROM grade a方法2:使用分組SELECT name,SUM(CASE course WHEN "語文" THEN score END) AS "語文",SUM(CASE course WHEN "數(shù)學(xué)" THEN score END) AS "數(shù)學(xué)",SUM(CASE course WHEN "英語" THEN score END) AS "英語"FROM grade GROUP BY name