计算机教程

当前位置:澳门娱乐场网址 > 计算机教程 > 从Oracle 表格行列转置说起第1/2页

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

来源:http://www.ablakeforum.com 作者:澳门娱乐场网址 时间:2020-05-08 14:09

NOMONEYDAY123114321-45324212-102250331008

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

NOMONTUETHR澳门娱乐场网址,12343-45242-10503


咱们一步步来实现:

1.运用DECODE转换行为列

SQL:

SELECT NO, DECODE(DAY,1,MONEY,'') DAY1, DECODE(DAY,2,MONEY,'') DAY2, DECODE(DAY,3,MONEY,'') DAY3FROM TEMP

结果:

NODAY1DAY2DAY31231431-452422-102503

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

SQL:

SELECT NO, MAX(DAY1) MON, MAX(DAY2) TUE, MAX(DAY3) THRFROM (SELECT NO, DECODE(DAY, 1, MONEY,'') DAY1, DECODE(DAY, 2, MONEY,'') DAY2, DECODE(DAY, 3, MONEY,'') DAY3FROM TEMP)GROUP BY NO;

结果:

NOMONTUETHR12343-45242-10503


重难点归纳:

1.DECODE缺省值设置

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

如果缺省值由''改为0,即SQL:

SELECT NO, MAX(DAY1) MON, MAX(DAY2) TUE, MAX(DAY3) THRFROM (SELECT NO, DECODE(DAY, 1, MONEY,0) DAY1, DECODE(DAY, 2, MONEY,0) DAY2, DECODE(DAY, 3, MONEY,0) DAY3FROM TEMP)GROUP BY NO;

结果如下:

NOMONTUETHR1234302420503000

2.列缺省值设置

SQL:

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

结果:

NOMONEYDAY123MON143TUE1-45THR242MON2-10TUE250THR3100undefined

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

原因:

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

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

优点:

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

decode()函數使用技巧 12阅读全文

本文由澳门娱乐场网址发布于计算机教程,转载请注明出处:从Oracle 表格行列转置说起第1/2页

关键词:

上一篇:EXECUTE IMMEDIATE用法小结

下一篇:没有了