欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Oracle报表开发中遇到的问题记录(持续更新。。)

程序员文章站 2024-01-15 21:40:28
...

一、取报表查询时间的当月第一天、最后一天、上月等日期

WHERE FISCALYEAR=DECODE('||V_KJQJ||',''01'','||V_LKJND||','||V_KJND||')
AND FISCALPERIOD=TO_CHAR(ADD_MONTHS(TO_DATE('||V_KJQJ||', ''MM''),-1), ''MM'')
----如果是一月份的话,就是上一年
SELECT TRUNC(TO_DATE(''||V_CXSJ||'','yyyymmdd'), 'mm')FIRSTDAY,
LAST_DAY(TRUNC(TO_DATE(''||V_CXSJ||'','yyyymmdd'), 'mm'))LASTDAY
FROM DUAL
----根据传入的查询时间来确定每月第一天和最后一天

二、生成GUID_ID()

在建立临时表需要生成ID列,因此需要按格式生成sys_guid()

select substr(sys_guid(),1,8)||'-'||substr(sys_guid(),9,4)||
'-'||substr(sys_guid(),13,4)||'-'||substr(sys_guid(),17,4)
||'-'||substr(sys_guid(),21,12) from dual
生成:5CBC731F-F1F4-0422-E055-000000000001

SELECT SYS_GUID() FROM DUAL CONNECR BY ROWNUM<=10
将会生成10条不同的GUID

三、Oracle实现累加

使用 sum(sal) over (order by ename)... 查询员工的薪水“连续”求和,

注意over (order by ename)如果没有order by 子句,求和就不是“连续”的,

Oracle报表开发中遇到的问题记录(持续更新。。)

sum(sal) over (partition by deptno order by ename) 按部门“连续”求总和
sum(sal) over (partition by deptno) 按部门求总和
sum(sal) over (order by deptno,ename) 不按部门“连续”求总和

sum(sal) over () 不按部门,求所有员工总和,效果等同于sum(sal)。

Oracle报表开发中遇到的问题记录(持续更新。。)

详细见:http://www.cnblogs.com/umen/archive/2011/04/11/2012136.html


四、Oracle实现忽略条件

在Oracle多条件查询中包含了空值条件,可采用like关系运算符
例如:select * from emp where deptno like to_char(变量1)||'%' and
ename like 变量2||'%' and
sal like to_char(变量3)||'%';

如果变量1、变量2、变量3中,有空值的话,就相当于没有这个条件一样了。


如下图中情况:

Oracle报表开发中遇到的问题记录(持续更新。。)

Oracle报表开发中遇到的问题记录(持续更新。。)

参考:https://zhidao.baidu.com/question/475872141.html