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

当你面对如下格式的一个表格:NO为人员的ID,MONEY是收入,DAY是星期(1代表星期一,7代表周日)。

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

————————

咱们一步步来实现:

1.运用DECODE转换行为列

SQL:

SELECT NO,
DECODE(DAY,1,MONEY,”) DAY1,
DECODE(DAY,2,MONEY,”) DAY2,
DECODE(DAY,3,MONEY,”) DAY3
FROM TEMP

结果:

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

SQL:

SELECT NO, MAX(DAY1) , MAX(DAY2) , MAX(DAY3)
FROM (SELECT NO,
DECODE(DAY, 1, MONEY,”) DAY1,
DECODE(DAY, 2, MONEY,”) DAY2,
DECODE(DAY, 3, MONEY,”) DAY3
FROM TEMP)
GROUP BY NO;

结果:

————————

重难点归纳:

1.DECODE缺省值设置

DECODE语法如下:dec%ignore_a_1%de(条件,值1,翻译值1,值2,翻译值2,…值n,翻译值n,缺省值)

青泥AI 青泥AI

青泥学术AI写作辅助平台

青泥AI 302 查看详情 青泥AI

如果缺省值由”(两个单引号)改为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;

结果如下():

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

SQL:

SELECT NO,MONEY,
DECODE(DAY,1,’MON’,2,’TUE’,3,’THR’,’undefined’) DAY
FROM TEMP

结果:

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

原因:

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

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

优点:

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1082758.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Microsoft Toolkit激活Office 2013教程
上一篇 2025年12月2日 19:35:07
如何避免vertical-align影响span标签宽度,实现图像与文本底部对齐?
下一篇 2025年12月2日 19:35:11

相关推荐

发表回复

登录后才能评论
关注微信