[zt]decode使用技巧
key words: decode,分组
使用 decode可以实现将多个不同的行级别的记录转换到列,有时很有用
come from here
表、视图结构转化
现有一个商品销售表sale,表结构为:
month char(6) –月份
sell number(10,2) –月销售金额
现有数据为:
200001 1000
200002 1100
200003 1200
200004 1300
200005 1400
200006 1500
200007 1600
200101 1100
200202 1200
200301 1300
想要转化为以下结构的数据:
year char(4) –年份
month1 number(10,2) –1月销售金额
month2 number(10,2) –2月销售金额
month3 number(10,2) –3月销售金额
month4 number(10,2) –4月销售金额
month5 number(10,2) –5月销售金额
month6 number(10,2) –6月销售金额
month7 number(10,2) –7月销售金额
month8 number(10,2) –8月销售金额
month9 number(10,2) –9月销售金额
month10 number(10,2) –10月销售金额
month11 number(10,2) –11月销售金额
month12 number(10,2) –12月销售金额
结构转化的sql语句为:
create or replace view
v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12)
as
select
substrb(month,1,4),
sum(decode(substrb(month,5,2),01,sell,0)),
sum(decode(substrb(month,5,2),02,sell,0)),
sum(decode(substrb(month,5,2),03,sell,0)),
sum(decode(substrb(month,5,2),04,sell,0)),
sum(decode(substrb(month,5,2),05,sell,0)),
sum(decode(substrb(month,5,2),06,sell,0)),
sum(decode(substrb(month,5,2),07,sell,0)),
sum(decode(substrb(month,5,2),08,sell,0)),
sum(decode(substrb(month,5,2),09,sell,0)),
sum(decode(substrb(month,5,2),10,sell,0)),
sum(decode(substrb(month,5,2),11,sell,0)),
sum(decode(substrb(month,5,2),12,sell,0))
from sale
group by substrb(month,1,4);


