现有一个商品销售表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语句,谢谢!

解决方案 »

  1.   

    select substr(month,1,4),
    sum(decode(substr(month,5),'01',sell,0)) month1,
    sum(decode(substr(month,5),'02',sell,0)) month2,
    sum(decode(substr(month,5),'03',sell,0)) month3,
    ...
    sum(decode(substr(month,5),'12',sell,0)) month12
    from tbname group by substr(month,1,4);
      

  2.   

    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);
      

  3.   

    create table sale
    (month    char(6),
    sell        number(10,2)
    )
    /
    insert into sale values('200001',1000);
    insert into sale values('200002',1100);
    insert into sale values('200003',1200);
    insert into sale values('200004',1300);
    insert into sale values('200005',1400);
    insert into sale values('200006',1500);
    insert into sale values('200007',1600);
    insert into sale values('200101',1100);
    insert into sale values('200202',1200);
    insert into sale values('200301',1300);
    /
    select * from sale
    /
    select substr(month,0,4) year,
    sum(case substr(month,5,2) when '01' then sell end) month1,
    sum(case substr(month,5,2) when '02' then sell end) month2,
    sum(case substr(month,5,2) when '03' then sell end) month3,
    sum(case substr(month,5,2) when '04' then sell end) month4,
    sum(case substr(month,5,2) when '05' then sell end) month5,
    sum(case substr(month,5,2) when '06' then sell end) month6,
    sum(case substr(month,5,2) when '07' then sell end) month7,
    sum(case substr(month,5,2) when '08' then sell end) month8,
    sum(case substr(month,5,2) when '09' then sell end) month9,
    sum(case substr(month,5,2) when '10' then sell end) month10,
    sum(case substr(month,5,2) when '11' then sell end) month11,
    sum(case substr(month,5,2) when '12' then sell end) month12
    from sale 
    group by substr(month,0,4)
    /
    drop table sale
    /