select MAX(NULL) from dual;
select MIN(NULL) from dual;
select AVG(NULL) from dual;
select SUM(NULL) from dual;
select COUNT(NULL) from dual;
结果分别是:
与Mysql的结果一致。
本文实例讲述了
oracle
实现
多行
合并的方法。分享给大家供大家参考。具体分析如下:
在写sql时,经常会有将某列的字段合并起来,比如将某人名下每个月的工资列示,但是每个人只能占一行。
像这种场景,可能用行列转换也能实现,但如果这个月份的信息不固定,就无法使用行列转换了。
oracle
10g以后,提供了一个
函数
WMSYS.WM_CONCAT,能很轻松实现该功能。
代码如下:select t.rank, WMSYS.WM_CONCAT(t.Name) TIME From t_menu_item t GROUP BY t.rank;
这样,看着就舒服多了。
这个方法没出来之前,可能还需要自己写一个
oracle
管道
函数
是一类特殊的
函数
,
oracle
管道
函数
返回值类型必须为集合
如果需要在客户端实时的输出
函数
执行过程中的一些信息,在
oracle
9i以后可以使用管道
函数
(pipeline function)。
关键字PIPELINED表明这是一个
oracle
管道
函数
,
oracle
管道
函数
的返回值类型必须为集合
--创建一个集合接受返回的值
1st.create or replace type type_split as table of varchar2(4000);
--创建管道
函数
create or replace function split(p_string varchar2,
分组
函数
作用于一组数据,并对一组数据返回一个值。
也叫:组
函数
,分组
函数
组
函数
会忽略空值:NVL
函数
使分组
函数
无法忽略空值\color{red}{组
函数
会忽略空值:NVL
函数
使分组
函数
无法忽略空值}组
函数
会忽略空值:NVL
函数
使分组
函数
无法忽略空值
常用的
多行
函数
COUNT
多行
函数
示例
1.统计记录数 count()
示例:查...
SELECT
decode(
( SELECT nvl( a.idenno, '11' ) FROM com_patientinfo a WHERE a.card_no = c.card_no ),
'11',
( SELECT t.id || '_' FROM SJPT_HOSPITAL t ) || c.card_
–and关键字的执行级别高于or
–可以使用小括号提升条件的执行级别,使用了小括号的级别是最高的
select * from emp where (job=‘SALESMAN’ or job=‘MANAGER’) and sal>2500
–
Oracle
函数
学习
(单行
函数
,
多行
函数
,转换
函数
,其他
函数
)
–单行
函数
学...
记录一个在
oracle
中
多行
转多列的
函数
,有一个项目近期到了收尾阶段,忽然客户说有一个成本分摊的统计表逻辑要调整,我一看需求瞬间头大了,其中比较麻烦的一段逻辑就是需要把单行的多列数据分割成
多行
,百度了一下方法,大概是这样的。
原数据结构如下:每个人会有多个成本分摊,最后需要汇总出每个成本中心的分摊金额
首先需要先把这每行数据分割一下,分割成一个成本分摊对应一行数据
select count(1) from emp;--查询总数量
select sum(sal) from emp;--工资总和
select
max
(sal) from emp;--最大工资
select
min
(sal) from emp;--最低工资
select
avg
(sal) from emp;--平均工资
---分组查询
--分组查询中,出现在group by 后面的原始列,才能出现在select后面
--没有出现在group by后面的列,想在se
select DISTINCT regexp_substr(you_col,'[^,]+',1,level)a,t.*
from you_table t
connect by level<=length(you_col)-length(regexp_replace(you_col,',',''))+1
order by sort
二.进阶(1)
使用如下语句拆分:
select DISTINCT regexp_substr(you_col,'[^,]+