zoukankan      html  css  js  c++  java
  • 同一报表,根据不同条件,执行不同Sql

    在某些ERP报表系统中,数据的存储是按照账套存储的,每年一个账套,对应一个数据库,这样在查询报表时,Sql语句就需要动态的从相应的数据中查询数据。
    也有需要在同一张样式的报表中,通过不同的条件,分别查看同一样式,不同聚合维度的数据等场景。
    类似以上的场景,就需要根据参数条件,动态的执行对应的Sql语句。

    场景一:根据选择不同年度,从不同账套(即数据库)查询数据
    例如:有三年的账套,分别对应三个数据库,2017、2018、2019,三个数据库查询的表结构一样。
    根据选择年份,从不同数据库查询数据。


    1.创建报表:使用完整的sql语句创建数据集获取结构,验证数据。



    2.添加报表参数:查询年度:cyear,可选数据手动添加3个年份;

    3.重新编辑数据集:使用动态Sql,通过参数值来控制数据库的名称。
    动态数据集查询语句:="select * from  [" & Parameters!cyear.Value & "].dbo.sales_订单",之后点击确定。
    可以将改语句放到文本框表达式中,验证语句输出结果,将结果复制到数据库管理工具执行,验证SQL正确性。


    4.验证效果。
    在参数中选择不同年份时,从不同的数据库查询sql。
    选2017时,查询数据库【2017】中的sales_订单表数据。

    选2018时,查询数据库【2018】中的sales_订单表数据。


    场景二、不同的查询维度,执行不同的sql语句。
    例如:查询周期参数值选择【天】时,查看每日明细;参数值为【月】时,查看每月汇总。

    1.完整sql创建数据集获取结构,并绑定表格。
    select 订购日期,运货费 from sales_订单



    2.添加查询周期参数:每日、每月、每季度,并设置可选值。


    3.修改数据集,改为动态参数。
    此处,根据不同的参数值,执行不同的sql语句,有两种实现方法:
    函数1.IIF函数
    数据集写法:
    =IIF(Parameters!cxzq.Value="每日","select convert(varchar(10),订购日期,112) 订购日期,运货费 from sales_订单",IIF(Parameters!cxzq.Value="每月","select convert(varchar(2),month(订购日期)) + '月' as 订购日期,sum(运货费) 运货费 from sales_订单 group by month(订购日期) order by month(订购日期) "," select datename(quarter,订购日期) + '季度' as 订购日期,sum(运货费) 运货费 from sales_订单 group by datename(quarter,订购日期) order by datename(quarter,订购日期)"))


    函数2.Switch函数
    数据集写法:
    =Switch(Parameters!cxzq.Value="每日","select convert(varchar(10),订购日期,112) 订购日期,运货费 from sales_订单",Parameters!cxzq.Value="每月","select convert(varchar(2),month(订购日期)) + '月' as 订购日期,sum(运货费) 运货费 from sales_订单 group by month(订购日期) order by month(订购日期)  ",Parameters!cxzq.Value="每季","select datename(quarter,订购日期) + '季度' as 订购日期,sum(运货费) 运货费 from  sales_订单 group by datename(quarter,订购日期) order by datename(quarter,订购日期)")



    函数的意思类似,就是分别根据不同的参数值,决定返回的sql语句。

    4.预览效果:选择不同参数值,查看报表。
    每日:


    每月:


    每季:

  • 相关阅读:
    centos 6.5 中设置mysql 5.1.73 主从同步配置过程
    13-jQuery事件绑定和常用鼠标事件
    12-jQuery获取相关尺寸
    11-jQuery简介和选择器
    10-js对象、数组
    09-js定时器、函数
    08-js流程控制、循环、元素操作
    07-js数据类型
    06-JavaScript简介
    05-CSS浮动、定位、页面布局
  • 原文地址:https://www.cnblogs.com/edoo/p/13446654.html
Copyright © 2011-2022 走看看