SQL函数

编辑
  • 文档创建者:印然
  • 浏览次数:32007次
  • 编辑次数:20次
  • 最近更新:Kevin-s 于 2019-06-17
  • 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)


    附件列表


    主题: 报表应用
    标签: 暂无标签 编辑/添加标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]