历史版本23 :SQL函数 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 应用场景

数据集函数 能够从数据集中直接进行条件取数,但是有的时候用户希望某个单元格能够直接获取到数据库中的某个值,而不是先要定义一个数据集后,再去取数据。

这时就可以用 SQL 函数。

1.2 函数说明

语法
SQL(connectionName,sql,columnIndex,rowIndex)返回的数据是从 connectionName 数据库中获取的 SQL 语句的表中的第 columnIndex 列第 rowIndex 行所对应的元素。
参数1connectionName数据连接名字,字符串形式,需要用引号如"FRDemo";
参数2sqlSQL 语句或者数据库存储过程,字符串形式,传参数、条件等可以在此拼接实现;
参数3columnIndex列序号,整型;
参数4rowIndex行序号,整型。

注:行序号可以省略,这样返回值为数据列。

2. 取数据库中指定内容编辑

示例数据:内置数据库 FRDemo 中的 STSCORE 数据表。

从内置数据库「FRDemo」里的 STSCORE 表取第三行第三列数据值。

从表 STSCORE 中,可看到第 3 行第 3 列的值为 Alex,如下图所示:

现在若要直接在报表的单元格中显示数据值:Alex,而不是通过先定义一个数据集后,再去取数据的方式,使用 sql() 公式,此时只需在单元格中输入:=sql("FRDemo","SELECT * FROM STSCORE",3,3)即可,预览就可看到 Alex 值,如下图所示:

3. 取数据库中带有参数的指定内容编辑

示例数据:内置数据库 FRDemo 中的 STSCORE 数据表。

3.1 SQL 参数为普通参数

需要取出班级为 Class1 的第 3 列所有值。

在单元格中输入:=sql("FRDemo","SELECT * FROM STSCORE where CLASSNO = 'Class1' ",3),显示效果(班级为 Class1 的第 3 列所有值),如下图所示:

公式说明:

公式
说明
"FRDemo"数据连接名
"SELECT * FROM STSCORE where CLASSNO = 'Class1' "SQL 语句;查询 CLASSNO 为 Class1 的数据
3列序号,第三列的数据

若需要显示某个具体值,如显示 Jonny (即班级为 Class1 的第 3 列第 4 行的值),写法如下:

=sql("FRDemo","SELECT * FROM STSCORE where CLASSNO = 'Class1' ",3,4)

3.2 SQL 参数为变量

若参数值为变量如为报表参数或者是某个单元格,则写法如下:=sql("FRDemo","SELECT * FROM STSCORE where CLASSNO = '"+$class+"' ",3,4) =sql("FRDemo","SELECT * FROM STSCORE where CLASSNO = '"+A1+"' ",3,4)

例如希望过滤控件选择不同班级,显示不同班级下所有的同学的名字。

首先设置模板参数「class」,然后在单元格中输入公式:=sql("FRDemo","SELECT * FROM STSCORE where CLASSNO = '"+$class+"' ",3),如下图所示:

1629702112732486.png

显示效果如下图所示:

1629702747622307.gif

如果传递的参数是获取当前单元格的值,即用 $$$ 作为参数时,字符串类型同样需要拼接单引号,例如:

=sql("FRDemo","SELECT * FROM STSCORE where CLASSNO = '"+$$$+"' ",3,4)

注1:如果参数或者单元格值有多个,那么 SQL 函数的写法如下:=sql("FRDemo","SELECT * FROM STSCORE where CLASSNO in ('"+$class+"') and COURSE  in ('"+$COURSE+"') ",3,4)

注2:class 参数返回值的分隔符需为',',具体请查看下拉复选框参数联动

3.3 sql 参数为变量且需要拼接

在 SQL 中还可以使用 IF 函数进行判断并拼接模板参数,例如希望实现当参数 class 为空时,选择全部学生姓名,可输入公式:

=sql("FRDemo","SELECT * FROM STSCORE where 1=1 "+if(len(class)== 0,"","and CLASSNO = '"+class+"'"),3) 

公式说明:

公式
说明
"SELECT * FROM STSCORE where 1=1 "将 SQL 语句两边加上引号作为字符串
 +if(len(class)== 0,"","and CLASSNO = '"+class+"'"

这里的+是指字符串拼接符号

将前面的 SQL 语句通过+进行拼接

当参数「class」为空,查询语句相当于:SELECT * FROM STSCORE 

当参数「class」不为空时,查询语句相当于:SELECT * FROM STSCORE  WHERE 1=1 and CLASSNO ='"+$class+"' 

sql("FRDemo","SELECT * FROM STSCORE where 1=1 "+if(len(class)== 0,"","and CLASSNO = '"+class+"'"),3) 

当参数「class」为空,相当于:sql("FRDemo","SELECT * FROM STSCORE",3)  

当参数「class」不为空时,查询语句相当于:sql("FRDemo","SELECT * FROM STSCORE  WHERE 1=1 and CLASSNO ='"+$class+"'",3)

如果在 SQL 中参数为模糊查询时,可使用如下公式:

=sql("FRDemo","SELECT * FROM STSCORE where CLASSNO like '%"+$class+"%' ",3,4)

4. 注意事项编辑

1)若使用 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)不支持在 SQL 函数中使用 insert in 语句。