当你面对如下格式的一个表格:NO为人员的ID,MONEY是收入,DAY是星期(1代表星期一,7代表周日)。
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增加新值只需增加记录,无需新增新列!
更多参考:Oracle中Decode()函数使用技巧
分享到:
相关推荐
通过以上实例可以看出,DECODE函数在Oracle数据库中是一个非常灵活且强大的工具,能够帮助我们在查询中实现复杂的条件判断和数据处理,特别是在需要进行行列互换、数据聚合等场景下,DECODE函数的应用显得尤为关键。
总之,Oracle的DECODE函数是SQL查询中不可或缺的一部分,尤其适用于处理简单的条件逻辑和数据转换。它能够有效地减少代码量,提高查询效率,使得数据库操作更加直观和易于理解。在实际开发中,熟练掌握DECODE函数的...
在Oracle数据库中,DECODE函数是一个非常实用的工具,它允许你在SQL查询中进行条件判断,将特定的值转换为其他值。DECODE函数在处理列转行的问题时,尤其适用于将多列数据合并到一行中,使得数据展示更加简洁明了。...
下面将详细介绍Oracle Decode()函数的使用技巧。 1. **基本语法**: Decode()函数的基本语法如下: ``` DECODE(source, value1, result1, value2, result2, ..., default_value) ``` 其中,`source`是要检查的...
### Oracle中Decode()函数的有关用法 #### 一、Decode()函数简介 在Oracle数据库中,`DECODE()`函数是一种非常实用的功能,主要用于条件判断并返回特定的值。它提供了一种简单的方法来实现多分支逻辑判断,尤其是...
我们可以使用 DECODE 函数来实现表的转置,例如: select sid, serial#, username, decode(command, 0, 'None', 2, 'Insert ', 3, 'Select ', 6, 'Update', 7, 'Delete ', 8, 'Drop', 'Other ') ...
下面将详细探讨在Oracle中实现行列转换的两种常见方法:使用DECODE函数的聚合查询和使用UNION操作符。 ### 一、使用DECODE函数的聚合查询 这种方法主要利用Oracle的DECODE函数,通过条件判断将特定的行值映射到...
Oracle的Decode函数是一种非常实用的工具,用于在SQL查询中执行简单的条件判断。它允许你在不使用CASE语句的情况下,根据指定的条件返回不同的值。这个函数尤其适用于那些需要进行多值判断的情况,使得代码更加简洁...
DECODE函数在Oracle数据库中非常灵活,可以根据不同的需求进行条件判断和值的转换,极大地简化了SQL查询的复杂性。它可以处理多个条件,同时返回一个明确的结果,是数据库查询中不可或缺的一部分。
这里使用了`MAX`函数与`DECODE`函数结合的方式,对不同的`field_id`值进行解码,将其转换为对应的列名,并返回该列的最大值。这实际上是在进行行列转换,即将原本存储在不同行中的`field_id`相关的`FIELD_VALUE`值,...
无论是使用CASE语句、DECODE函数还是PIVOT操作符,关键在于理解数据结构和转换需求,选择最合适的工具来实现转换。这些技能对于高效处理和分析复杂数据集至关重要,尤其是在IT行业中,掌握这些技能将大大提高数据...
DECODE函数是Oracle PL/SQL中的一个独特特性,它在软件开发,尤其是数据库查询中,提供了一种简洁而高效的方法来进行条件判断和数据转换。这个函数在Oracle SQL中扮演了if-then-else逻辑的角色,允许开发者在SQL查询...
这条语句利用Decode函数将v$session视图中的command字段进行转换,从而将命令编号转换成更具可读性的文本描述。 最后,根据文件内容中提供的SQL片段,我们还可以看到Decode函数被用于创建视图: CREATE OR REPLACE...
但请注意,实际的行列转换通常需要用到更复杂的SQL语句,如Pivot或CASE语句,而DECODE函数通常只在简单的转换场景中使用。 总的来说,Oracle DECODE函数是数据库查询中的一个重要工具,尤其在处理条件判断和数据...
在Oracle数据库中,行列转换是一项常用且强大的功能,它允许数据在不同的维度上进行转换,以便于数据分析和报告。本文将深入探讨Oracle中实现行列转换的几种方法,包括使用`UNION ALL`、`MODEL`子句以及集合类型(`...
Oracle函数是数据库操作中的核心组成部分,它们允许开发人员和DBA执行各种计算、转换、查询和数据处理任务。手册中可能涵盖了以下几类函数: 1. 数学函数:如ABS(取绝对值)、MOD(取模)、ROUND(四舍五入)等,...
2. DECODE函数:根据条件判断进行选择性值转换。 3. DUMP函数:返回字符集、长度、数据类型和字符表示的表达式。 4. EMPTY_CLOB函数:返回一个空的CLOB(Character Large Object)值。 5. EMPTY_BLOB函数:返回一个...
这个中文帮助文档是开发者和DBA们在进行Oracle数据库操作时的重要工具,它能提供详尽的函数解释、用法示例以及相关提示。 1. **SQL函数类别**: - 数学函数:如ABS、MOD、ROUND等,用于数学计算和数值处理。 - ...