oracle

推荐列表 站点导航

当前位置:首页 > 数据库 > oracle >

从Oracle 表格行列转置说起第1/2页

来源:网络整理  作者:网络  发布时间:2020-12-12 14:23
当你面对如下格式的一个表格:NO为人员的ID,MONEY是收入,DAY是星期(1代表星期一,7代表周日)。...

2 50

NO MON TUE THR

2 -10

2 42 -10 50

FROM (SELECT NO,
DECODE(DAY,2,MONEY,'') DAY2,

2 -10 TUE

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

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

3

1 23 MON

3 100 8

FROM TEMP)

NO MONEY DAY

3 100 undefined

1.DECODE缺省值设置

GROUP BY NO;

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

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

SELECT NO,MONEY,

2 50 THR

1 23 43 0

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

1 23 43 -45

1 23

结果:

SQL:

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

1 -45

1 43

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

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

3 0 0 0

2 42 MON

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

SQL:

原因:

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

优点:

3

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

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

结果:

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

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

NO DAY1 DAY2 DAY3

2 50 3

2 42 -10 50

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

FROM TEMP)

重难点归纳:

1 23 43 -45

咱们一步步来实现:

FROM (SELECT NO,
DECODE(DAY, 1, MONEY,'') DAY1,

1.运用DECODE转换行为列

SQL:

结果:

1 -45 THR

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

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

SELECT NO,

1 43 TUE

DECODE(DAY,1,MONEY,'') DAY1,
DECODE(DAY, 3, MONEY,0) DAY3

NO MON TUE THR

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

2 42 0 50

3

GROUP BY NO;

FROM TEMP

NO MON TUE THR

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

2 42

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

相关热词: oracle

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/sql/oracle/2953.shtml

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

从Oracle 表格行列转置说起第1/2页

2020-12-12 编辑:网络

2 50

NO MON TUE THR

2 -10

2 42 -10 50

FROM (SELECT NO,
DECODE(DAY,2,MONEY,'') DAY2,

2 -10 TUE

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

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

3

1 23 MON

3 100 8

FROM TEMP)

NO MONEY DAY

3 100 undefined

1.DECODE缺省值设置

GROUP BY NO;

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

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

SELECT NO,MONEY,

2 50 THR

1 23 43 0

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

1 23 43 -45

1 23

结果:

SQL:

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

1 -45

1 43

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

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

3 0 0 0

2 42 MON

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

SQL:

原因:

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

优点:

3

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

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

结果:

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

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

NO DAY1 DAY2 DAY3

2 50 3

2 42 -10 50

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

FROM TEMP)

重难点归纳:

1 23 43 -45

咱们一步步来实现:

FROM (SELECT NO,
DECODE(DAY, 1, MONEY,'') DAY1,

1.运用DECODE转换行为列

SQL:

结果:

1 -45 THR

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

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

SELECT NO,

1 43 TUE

DECODE(DAY,1,MONEY,'') DAY1,
DECODE(DAY, 3, MONEY,0) DAY3

NO MON TUE THR

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

2 42 0 50

3

GROUP BY NO;

FROM TEMP

NO MON TUE THR

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

2 42

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

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/sql/oracle/2953.shtml

相关文章

风云图片

推荐阅读

返回oracle频道首页