[原]做报表,写Sql语句的一点收获

时间:2022-03-06 19:41:49

Sql语句一直是弱项,最近整报表可是痛苦呀,一个select能写两天。

整理一下一些常用的函数和写法放在这,以后忘了来看看,呵呵(针对Oracle数据库)。

例子都是生产中的例子,直接放上来保存着,后面要用的时候,我就直接复制过去用了,看起来比较费劲,例子大家还是不要看了。

一、递归查询

    Start with...Connect By,用于对一个树形结构的表递归遍历,Start with后面跟初始值,Connect By后面跟遍历条件。

    比如:

   

[原]做报表,写Sql语句的一点收获[原]做报表,写Sql语句的一点收获START WITH CONNECT BY例子

 

二、NVL(eExpression1, eExpression2)从两个表达式返回一个非 null

如果 eExpression1 的计算结果为 null 值,则 NVL( ) 返回 eExpression2。如果 eExpression1 的计算结果不是 null 值,则返回 eExpression1eExpression1 eExpression2 可以是任意一种数据类型。如果 eExpression1 eExpression2 的结果皆为 null 值,则 NVL( ) 返回NULL

比如:

[原]做报表,写Sql语句的一点收获[原]做报表,写Sql语句的一点收获Nvl函数例子

 

三、Round 函数对指定数值进行四舍五入

    ROUND(number,[decimal_places])

参数:

number :预处理对数值。

decimal_places : 四舍五入后保留的小数位数。

示例同Nvl函数例子。

四、结果集集合操作 UnionUnion AllIntersectMinus

1、  Union,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

2、  Union All,对两个结果集进行并集操作,包括重复行,不进行排序;

3、  Intersect,对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;

4、  Minus,对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。

注意:如果要人为的用Oder by 排序,order by必须放在最后一个集合里面。

比如:

[原]做报表,写Sql语句的一点收获[原]做报表,写Sql语句的一点收获Union All例子

 

五、条件表达式case when then else end

语法:CASE

WHEN  eExpression1  THEN  Value1;
WHEN  eExpression2  THEN  Value2;
WHEN  eExpression3  THEN  Value3;
ELSE  Value4;
END

类似与程序里面的if else,就不过说了,看四中队例子。

六、Decode()函数

DECODE函数比较表达式和搜索字,如果匹配,对应的结果

语法:DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value等于if1时,DECODE函数的结果返回then1,...,如果不等于任何一个if值,则返回else

比如:

[原]做报表,写Sql语句的一点收获[原]做报表,写Sql语句的一点收获Decode 例子