源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-04-17 01:59 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:从Oracle 表格行列转置说起第1/2页
[b]NO[/b] [b]MONEY[/b] [b]DAY[/b]
1 23 1
1 43 2
1 -45 3
2 42 1
2 -10 2
2 50 3
3 100 8
为了符合阅读习惯,最终报表希望是如下格式:
[b]NO[/b] [b]MON[/b] [b]TUE[/b] [b]THR[/b]
1 23 43 -45
2 42 -10 50
3      
------------------------ 咱们一步步来实现: 1.运用DECODE转换行为列 [b]SQL:[/b] SELECT NO,     DECODE(DAY,1,MONEY,'') DAY1,     DECODE(DAY,2,MONEY,'') DAY2,     DECODE(DAY,3,MONEY,'') DAY3 FROM TEMP [b]结果:[/b]
[b]NO[/b] [b]DAY1[/b] [b]DAY2[/b] [b]DAY3[/b]
1 23
1 43
1 -45
2 42
2 -10
2 50
3      
2.按NO字段分组,并更改列名 [b]SQL:[/b] 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; [b]结果:[/b]
[b]NO[/b] [b]MON[/b] [b]TUE[/b] [b]THR[/b]
1 23 43 -45
2 42 -10 50
3      
------------------------ 重难点归纳: [b]1.DECODE缺省值设置[/b] 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):
[b]NO[/b] [b]MON[/b] [b]TUE[/b] [b]THR[/b]
1 23 43 0
2 42 0 50
3 0 0 0
[b]2.列缺省值设置(DAY值为8的显示为'undefined')[/b] [b]SQL:[/b] SELECT NO,MONEY,     DECODE(DAY,1,'MON',2,'TUE',3,'THR','undefined') DAY FROM TEMP [b]结果:[/b]
[b]NO[/b] [b]MONEY[/b] [b]DAY[/b]
1 23 MON
1 43 TUE
1 -45 THR
2 42 MON
2 -10 TUE
2 50 THR
3 100 undefined
[b]3.行列转化在表单内数据量较大的情况下消耗较大[/b] 原因: 1.扫描目标数据时间开销大。 2.GROUP BY时,数据冗余带来的多行合并。 [b]优点:[/b] [b]表结构稳定:DAY增加新值只需增加记录,无需新增新列![/b] 下一页 decode()函數使用技巧
当前1/2页 [b]1[/b][url=http://www.1sucai.cn/article/20097_2.htm]2[/url][url=http://www.1sucai.cn/article/20097_2.htm]下一页[/url][url=http://www.1sucai.cn/article/20097_all.htm]阅读全文[/url]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部