finereport的SQL函数
finereport SQL函数
1. 公式解释
有的时候希望某个单元格能够直接获取到数据库中的某个值,⽽不是先要定义⼀个数据集后,再去取数据。这时就可以⽤ SQL 函数,下⾯讲解下 SQL 函数的⽤法。
SQL(connectionName,sql,columnIndex,rowIndex):返回的数据是从 connectionName 数据库中获取的 SQL 语句的表中的第columnIndex 列第 rowIndex ⾏所对应的元素。
connectionName:数据库名,字符串形式,需要⽤引号如"FRDemo";
sql:SQL 语句或者数据库存储过程,字符串形式,传参数、条件等可以在此拼接实现;
columnIndex:列序号,整型;
rowIndex:⾏序号,整型。
注:⾏序号可以不写,这样返回值为数据列。
2. 以我们提供的数据源 FRDemo 为例
2.1 ⽰例(就⼀般的只获取某个字段内容)
从表 STSCORE 中,我们可看到第 3 ⾏第 3 列的值为 Alex,如下:
现在若要直接在报表的单元格中显⽰数据值:Alex,⽽不通过先定义⼀个数据集后,再去取数据的⽅式,这⾥就可以使⽤ sql() 公式,此时只需在单元格中输⼊:=sql("FRDemo","SELECT * FROM STSCORE",3,3)即可,预览就可看到 Alex 值。
2.2 ⽰例(带有参数时公式的使⽤)
带有参数形式的时候,直接在报表的单元格中获取数据值,写法如下:
=sql("FRDemo","SELECT * FROM STSCORE where CLASSNO = 'Class1' ",3)
显⽰效果(班级为 Class1 的第 3 列所有值),如下:
若需要显⽰某个具体值,如:显⽰ Jonny 的效果(即班级为 Class1 的第 3 列第 4 ⾏的值),写法如下:
=sql("FRDemo","SELECT * FROM STSCORE where CLASSNO = 'Class1' ",3,4)
若参数值为变量如为报表参数或者是某个单元格,则写法如下:
=sql("FRDemo","SELECT * FROM STSCORE where CLASSNO = '"+$class+"' ",3,4)
或
=sql("FRDemo","SELECT * FROM STSCORE where CLASSNO = '"+A1+"' ",3,4)
如果传递的参数是获取当前单元格的值,即⽤ $$$ 作为参数时,字符串类型同样需要拼接单引号,如下:
=sql("FRDemo","SELECT * FROM STSCORE where CLASSNO = '"+$$$+"' ",3,4)
注:如果参数或者单元格值有多个,那么 SQL 函数的写法如下:
=sql("FRDemo","SELECT * FROM STSCORE where CLASSNO in ('"+$class+"') ",3,4)
注:并且 class 参数返回值的分隔符需为',',具体请查看。
如果在 SQL 中还要⽤if进⾏判断并拼接模板参数时,如下:
=sql("FRDemo","SELECT * FROM STSCORE where 1=1 "+if(len(p1)== 0,"","and CLASSNO = '"+p1+"'"),3,4)
以上内容就是有关 SQL 函数的介绍。
若是调⽤数据库存储过程取数,建议采⽤官⽅只⽀持查询语句 select 进⾏取数,其他写法(例如下⾯的写法), 返回的结果不能保证,不建议使⽤ :
=sql("dbname","{call 存储过程名 (参数1,参数2,...)}",1,1)
=sql("dbname","exec 存储过程名 参数1,参数2,...",1,1)
注:参数如果是字符串的话,参数需要⽤英⽂单引号引起来如:'参数1'。没有参数的需⽤?补全,例如=sql("140","{call SCOTT.P_EMP (?) }",2,2)
=================================================
2.finereport select函数使⽤
1. 概述
⼀般情况下,我们直接使⽤数据列的拖拽就能制作出想要的报表,但对于习惯编程的⽤户或者希望根据不同的条件控制某个单元使⽤哪个数据列时,我们也同样⽀持直接在单元格中使⽤来实现,这样的函数我们称为数据集函数。
以下列出所有的数据集函数及⽤法。
2. tablename.select
tablename.select(colname,筛选条件1&&筛选条件2&&......)
说明:选出数据集某列中符合条件的数据,返回结果是⼀个数组,相同数据不会合并。
其中 tablename 表⽰数据集名称,注意是报表数据集或者是服务器数据集名,⽽⾮数据库中的表名;
colname 表⽰列名,⼤⼩写不区分。
⽰例:
如数据集 ds1 取出内置 FRDemo 数据库中的销量表
在单元格中输⼊=ds1.select(销售员),返回数据集ds1销售员列中的所有值。
在单元格中输⼊=ds1.select(销售员,地区 = "华东"&&销量 > 200),返回数据集 ds1 华东地区销售总额超过 200 的销售员。
在单元格中输⼊=ds1.select(销售员,地区="华东"||地区="华北"),返回数据集 ds1 华东地区或华北地区的销售员。
注:筛选条件中的判断既可以使⽤单等号,也可以使⽤双等号;字符串也同时可以使⽤单引号或者是双
引号,对结果均没有影响。
3. up
说明:选出数据集某列中符合条件的数据并分组,还可以按照该列进⾏升降序排列。
其中 tablename 表⽰数据集名称、colname 表⽰列名;
升降序为布尔值,true 表⽰升序,false 表⽰降序。
⽰例:
如数据集 ds1 取出内置 FRDemo 数据库中的销量表
在单元格中输⼊=up(销售员),返回数据集 ds1 销售员列中的值,并且相邻数据若相同会进⾏合并。
在单元格中输⼊=up(销售员,true,false)或=up(销售员,,false),返回数据集 ds1 销售员列中的值,并且其中只要相同就会进⾏合并,结果为降序排列,中间的参数为条件,若没有条件,可以不
写或者使⽤ true,但是不能省略。
在单元格中输⼊=up(销售员,地区=="华东"),返回数据集 ds1 华东地区的销售员,并且相邻数据若相同会进⾏合并。
在单元格中输⼊=up(销售员,地区=="华东",true),返回数据集 ds1 华东地区的销售员,并且会合并所有相同项,结果为升序排列。
4. tablename.select(#0)
说明:返回数据集 ds1 中的⾏号。
⽰例:
如数据集 ds1 取出内置 FRDemo 数据库中的销量表
在单元格中输⼊=ds1.select(#0),数据集 ds1 中⼀共有 45 条数据,因此返回⾏号 1,2,3,......45。
5. tablename.value(row,col/colname)
说明:获取数据集 ds1 中某⾏某列的值。
⽰例:
如数据集 ds1 取出内置 FRDemo 数据库中的销量表
在单元格中输⼊=ds1.value(3,2),返回数据集 ds1 中第 3 ⾏第 2 列的值。
在单元格中输⼊=ds1.value(3,"销售员"),返回数据集 ds1 中第 3 ⾏销售员列的值。
注:报表的图表标题不⽀持 value 函数
6. 实例
6.1 实例 1:数据集函数返回的数据进⾏扩展
直接将数据列拖拽到单元格时会⾃动从上到下扩展。但是使⽤数据集函数获得数据为⼀个数组,是显⽰在⼀个单元格中的,需要另外给单元格设置扩展属性,数据才会进⾏扩展。
6.2 实例 2:根据不同条件选择使⽤哪个字段
在单元格中输⼊如下公式:
=if(条件,up(customerid),up(customerid))
并设置其扩展属性为从上到下。
说明条件为真,则单元格使⽤数据集 ds1 中的 customerid 列,否则使⽤ ds2 中的 customerid 列 。
6.3 实例 3:对数据集函数返回的数据再进⾏运算
如公式=sum(ds1.select(销量)),返回数据集 ds1 销量列的总和。
value函数什么意思sum 求和公式也可以换⽤其他如 count、max 等。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论