从Oracle 表格行列转置说起第1/2页
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()函數使用技巧编程语言
- 甘肃哪有关键词排名优化购买方式有哪些
- 甘肃SEO如何做网站优化
- 河南seo关键词优化怎么做电话营销
- 北京SEO优化如何做QQ群营销
- 来宾百度关键词排名:提升您网站曝光率的关键
- 卢龙关键词优化:提升您网站排名的策略与技巧
- 山东网站优化的注意事项有哪些
- 四川整站优化怎样提升在搜索引擎中的排名
- 疏附整站优化:提升网站性能与用户体验的全新
- 海南seo主要做什么工作售后服务要做到哪些
- 荣昌百度网站优化:提升您网站的搜索引擎排名
- 河北seo网站排名关键词优化如何做SEO
- 江西优化关键词排名推广售后保障一般有哪些
- 古浪SEO优化:提升你的网站可见性
- 西藏网站排名优化怎么把网站排名在百度首页
- 如何提升阳东百度快照排名:详尽指南