关于Oracle的行转列

看下面的表结构:

Category设备类型String
DeviceNum设备数量Number
Area区域String

查询结果如下:

JLE8Wgczy9es4I5BZvn4dZwTyLoos65cN7VjLsln5H3pyw8BRx0RSAAAAAElFTkSuQmCC

现在要显示成下图的效果就要使用普通的行转列语句。

XXMjL++AAAAAElFTkSuQmCC

sql语句:

 
     
1 select AREA,
2 sum (decode(category, ' 2G基站 ' ,devicenum, null )) "2G",
3 sum (decode(category, ' 3G基站 ' ,devicenum, null )) "3G",
4 sum (decode(category, ' 总计 ' ,devicenum, null )) " ALL "
5 from MV_CUTOVER_BASESITE_CAPACITY
6 group by AREA

查询结果为:

gE52OrOS8BVzgAAAABJRU5ErkJggg==

上面的行转列比较简单,再看下面的表结构:

b85UnjkcppUXHMNawe6WcZhWXnAMawW7W2bhTHPgwEHJsATcduDAQTYcpjlw8CbgMM2BgzcBh2kOHLwJOExz4OBN4P8B0qPQIscpyZ4AAAAASUVORK5CYII=

查询结果为:

c9Jtup4AAAAASUVORK5CYII=

现在需要达到下图这种效果:

a5zTPkAAAAASUVORK5CYII=

这里的普通行转列不能完成,需要union all来连接:

 
     
1 select ' 已办工单 ' "TYPE", a. * from (
2 select
3 sum (nvl(decode(area, ' 杭州 ' ,inprogressnum, null ), 0 )) "HANGZHOU" ,
4 sum (nvl(decode(area, ' 湖州 ' ,inprogressnum, null ), 0 )) "HUZHOU" ,
5 sum (nvl(decode(area, ' 金华 ' ,inprogressnum, null ), 0 )) "JINHUA" ,
6 sum (nvl(decode(area, ' 宁波 ' ,inprogressnum, null ), 0 )) "NINGBO" ,
7 sum (nvl(decode(area, ' 全省 ' ,inprogressnum, null ), 0 )) " ALL "
8 from mv_service_order
9 ) a, dual b
10 union all
11 select ' 超时工单 ' "TYPE", a. * from (
12 select
13 sum (nvl(decode(area, ' 杭州 ' ,achivenum, null ), 0 )) "HANGZHOU" ,
14 sum (nvl(decode(area, ' 湖州 ' ,achivenum, null ), 0 )) "HUZHOU" ,
15 sum (nvl(decode(area, ' 金华 ' ,achivenum, null ), 0 )) "JINHUA" ,
16 sum (nvl(decode(area, ' 宁波 ' ,achivenum, null ), 0 )) "NINGBO" ,
17 sum (nvl(decode(area, ' 全省 ' ,achivenum, null ), 0 )) " ALL "
18 from mv_service_order
19 )a, dual b
20 union all
21 select ' 已归档工单 ' "TYPE",a. * from (
22 select
23 sum (nvl(decode(area, ' 杭州 ' ,delaynum, null ), 0 )) "HANGZHOU" ,
24 sum (nvl(decode(area, ' 湖州 ' ,delaynum, null ), 0 )) "HUZHOU" ,
25 sum (nvl(decode(area, ' 金华 ' ,delaynum, null ), 0 )) "JINHUA" ,
26 sum (nvl(decode(area, ' 宁波 ' ,delaynum, null ), 0 )) "NINGBO" ,
27 sum (nvl(decode(area, ' 全省 ' ,delaynum, null ), 0 )) " ALL "
28 from mv_service_order
29 )a,dual b
30 union all
31 select ' 工单总量 ' "TYPE",a. * from (
32 select
33 sum (nvl(decode(area, ' 杭州 ' ,totalnum, null ), 0 )) "HANGZHOU" ,
34 sum (nvl(decode(area, ' 湖州 ' ,totalnum, null ), 0 )) "HUZHOU" ,
35 sum (nvl(decode(area, ' 金华 ' ,totalnum, null ), 0 )) "JINHUA" ,
36 sum (nvl(decode(area, ' 宁波 ' ,totalnum, null ), 0 )) "NINGBO" ,
37 sum (nvl(decode(area, ' 全省 ' ,totalnum, null ), 0 )) " ALL "
38 from mv_service_order
39 )a, dual b

查询结果如下:

0AQ6rkR8sCcASwgYHAMCdu3D7xiiSLCEEJdjQCDtSyGKBEsIcTkGBNK+FKJIsIQQl2NAuNGzS8nIyF7TBu1ryMjIyF7PSPvIyMhe0Uj7yMjIXtH+B95IH1Kvt8FhAAAAAElFTkSuQmCC

posted on 2011-06-07 11:15  PeteYan 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/phirothing/archive/2011/06/07/2074144.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值