手机
当前位置:查字典教程网 >编程开发 >Oracle教程 >从Oracle 表格行列转置说起第1/2页
从Oracle 表格行列转置说起第1/2页
摘要:NOMONEYDAY123114321-45324212-102250331008为了符合阅读习惯,最终报表希望是如下格式:NOMONTUE...

NO MONEY DAY
1 23 1
1 43 2
1 -45 3
2 42 1
2 -10 2
2 50 3
3 100 8

为了符合阅读习惯,最终报表希望是如下格式:

NO MON TUE THR
1 23 43 -45
2 42 -10 50
3

------------------------

咱们一步步来实现:

1.运用DECODE转换行为列

SQL:

SELECT NO,

DECODE(DAY,1,MONEY,'') DAY1,

DECODE(DAY,2,MONEY,'') DAY2,

DECODE(DAY,3,MONEY,'') DAY3

FROM TEMP

结果:

NO DAY1 DAY2 DAY3
1 23
1 43
1 -45
2 42
2 -10
2 50
3

2.按NO字段分组,并更改列名

SQL:

SELECT NO, MAX(DAY1) MON, MAX(DAY2) TUE, MAX(DAY3) THR

FROM (SELECT NO,

DECODE(DAY, 1, MONEY,'') DAY1,

DECODE(DAY, 2, MONEY,'') DAY2,

DECODE(DAY, 3, MONEY,'') DAY3

FROM TEMP)

GROUP BY NO;

结果:

NO MON TUE THR
1 23 43 -45
2 42 -10 50
3

------------------------

重难点归纳:

1.DECODE缺省值设置

DECODE语法如下:decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

如果缺省值由''(两个单引号)改为0,即SQL:

SELECT NO, MAX(DAY1) MON, MAX(DAY2) TUE, MAX(DAY3) THR

FROM (SELECT NO,

DECODE(DAY, 1, MONEY,0) DAY1,

DECODE(DAY, 2, MONEY,0) DAY2,

DECODE(DAY, 3, MONEY,0) DAY3

FROM TEMP)

GROUP BY NO;

结果如下(所有值为负与空值都被赋为0):

NO MON TUE THR
1 23 43 0
2 42 0 50
3 0 0 0

2.列缺省值设置(DAY值为8的显示为'undefined')

SQL:

SELECT NO,MONEY,

DECODE(DAY,1,'MON',2,'TUE',3,'THR','undefined') DAY

FROM TEMP

结果:

NO MONEY DAY
1 23 MON
1 43 TUE
1 -45 THR
2 42 MON
2 -10 TUE
2 50 THR
3 100 undefined

3.行列转化在表单内数据量较大的情况下消耗较大

原因:

1.扫描目标数据时间开销大。

2.GROUP BY时,数据冗余带来的多行合并。

优点:

表结构稳定:DAY增加新值只需增加记录,无需新增新列!

下一页 decode()函數使用技巧

当前1/2页12下一页阅读全文

【从Oracle 表格行列转置说起第1/2页】相关文章:

oracle 服务启动,关闭脚本(windows系统下)

Oracle 数据库操作技巧集

oracle闪回表详解

Oracle排名函数(Rank)实例详解

Oracle如何直接运行OS命令(上)第1/2页

oracle 日期函数集合(集中版本)第1/2页

oracle列合并的实现方法

Oracle提高sql执行效率的心得建议

Oracle 细粒度审计(FGA)初步认识

Oracle 语句优化分析说明第1/2页

精品推荐
分类导航