不同语句,列不同,如何放在同一张报表里(根据控件选择执行不同语句)

image.png如图,两个不同语句,字段也不同,如何根据参数栏的【明细】的true/false 来执行不同语句,可以放在两个sheet表里,但是,要控制只有其中一个DS的执行,另一个不执行,因为数据量大,要避免不必要的执行

FineReport Clown. 发布于 2024-12-3 10:13 (编辑于 2024-12-3 10:43)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
1
snrtuemcLv8专家互助
发布于2024-12-3 10:14(编辑于 2024-12-3 10:38)

这个写法

${if(参数名,"sql1","sql2")}

========

也可以

关联数据集 https://help.fanruan.com/finereport/doc-view-125.html

image.png========================

参数名,换成你控件名,更新下,你里面有个引号

${if(参数名,"SELECT LT.LOTNO AS 批次号, PT.PARTCODE AS 物料编码, LT.LAUNCHQUANTITY AS 投入量, LT.CURRENTQUANTITY AS 加工量, PD.PROCEDURENAME AS 工序段, OP.OPERATIONNAME AS 工序, US.FULLNAME AS 作业员, LR.ACTUALSTARTDATE AS 开始时间 FROM LOT LT LEFT JOIN LOTROUTING LR ON LT.LOTID = LR.LOTID LEFT JOIN TASK TK ON TK.ROUTINGDETAILID = LR.ROUTINGDETAILID LEFT JOIN WORKUNIT WK ON WK.WORKUNITID = TK.WORKUNITID LEFT JOIN PROCEDUREOPERATION PO ON PO.PROCEDUREOPERATIONID = LR.PROCEDUREOPERATIONID LEFT JOIN PROCEDURE PD ON PD.PROCEDUREID = PO.PROCEDUREID LEFT JOIN OPERATION OP ON OP.OPERATIONID = PO.OPERATIONID LEFT JOIN PART PT ON PT.PARTID = LT.PARTID LEFT JOIN \"USER\" US ON US.USERID = TK.OPERATORID WHERE NOT ( LR.ACTUALSTARTDATE IS NOT NULL AND LR.ACTUALENDDATE IS NULL ) AND LR.ACTUALSTARTDATE >= to_date('"+start_time+"','YYYY-MM-DD HH24:MI:SS') AND LR.ACTUALSTARTDATE <= to_date('"+end_time+"','YYYY-MM-DD HH24:MI:SS') ORDER BY LT.LOTNO, LR.ACTUALSTARTDATE","SELECT PD.PROCEDURENAME AS 工序段, OP.OPERATIONNAME AS 工序, COUNT( LT.LAUNCHQUANTITY ) AS 总批次, SUM( LT.LAUNCHQUANTITY ) AS 总数量 FROM LOT LT LEFT JOIN LOTROUTING LR ON LT.LOTID = LR.LOTID LEFT JOIN PROCEDUREOPERATION PO ON PO.PROCEDUREOPERATIONID = LR.PROCEDUREOPERATIONID LEFT JOIN PROCEDURE PD ON PD.PROCEDUREID = PO.PROCEDUREID LEFT JOIN OPERATION OP ON OP.OPERATIONID = PO.OPERATIONID WHERE NOT ( LR.ACTUALSTARTDATE IS NOT NULL AND LR.ACTUALENDDATE IS NULL ) AND LR.ACTUALSTARTDATE >= to_date('"+start_time+"','YYYY-MM-DD HH24:MI:SS') AND LR.ACTUALSTARTDATE <= to_date('"+end_time+"','YYYY-MM-DD HH24:MI:SS') GROUP BY PD.PROCEDURENAME, OP.OPERATIONNAME")}

image.png

  • Clown. Clown.(提问者) 我试过了,不行 ,因为语句里还有 AND LR.ACTUALSTARTDATE >= to_date('${start_time}','YYYY-MM-DD HH24:MI:SS') AND LR.ACTUALSTARTDATE <= to_date('${end_time}','YYYY-MM-DD HH24:MI:SS'),就一直提示 出现不支持的SQL92标记 2
    2024-12-03 10:17 
  • snrtuemc snrtuemc 回复 Clown.(提问者) 这个你拼接问题,你可以拷贝下整个语句,给你修改,标准格式是这个 ${if(参数名,"XXXXXX AND LR.ACTUALSTARTDATE >= to_date('"+start_time+"','YYYY-MM-DD HH24:MI:SS') AND LR.ACTUALSTARTDATE <= to_date('"+end_time+"','YYYY-MM-DD HH24:MI:SS')","sql2")}
    2024-12-03 10:19 
  • Clown. Clown.(提问者) 字段不同,数据关联不能显示
    2024-12-03 10:19 
  • snrtuemc snrtuemc 回复 Clown.(提问者) sql语句格式给你拼接了,按我的这个格式是不会报错,可以的
    2024-12-03 10:20 
  • snrtuemc snrtuemc 回复 Clown.(提问者) 看修改答案,更新下,你里面有个引号,我更新答案了
    2024-12-03 10:27 
最佳回答
0
ZxxTLv6初级互助
发布于2024-12-3 10:15

写在sql里,查到哪个参数执行哪一段。

最佳回答
0
华莉星宸Lv7资深互助
发布于2024-12-3 10:17(编辑于 2024-12-3 10:17)

在两个数据集分别价格条件呗

比如参数A  执行数据集1

${if(参数名='A',"1=1","1=2")}

比如参数B  执行数据集2

${if(参数名='B',"1=1","1=2")}

 根据参数隐藏sheet页

JS隐藏sheet页 https://help.fanruan.com/finereport/doc-view-1740.html

最佳回答
0
CD20160914Lv8专家互助
发布于2024-12-3 10:23

image.png

别闹了。你数据量大,还有关联数据集???你到底是想让它出来。不是不想让它出来。采用etl同步在一张表,把结构设计成一样的。没有的列为空就行,增加一列数据来源类型。。比如ds1  与ds2两个。最后直接查询这一张的数据来源类型就行了。而不是你这样分开写。。。再判断

最佳回答
0
Zzz1002Lv2见习互助
发布于2024-12-3 10:49

with a as (select 1 as column1,2 as column2 from dual),

b as (select 1 as column1,2 as column2,3 as column3 from dual),

c as (select 1 as column1,2 as column2,3 as column3,4 as column4 from dual) 

select

a.column1,a.column2,b.column3

${if(detail='True',"",",sum(c.column4)")}

from a

left join b on a.column1=b.column1 and a.column2=b.column2

${if(detail='True',"","left join c on a.column1=c.column1 and a.column2=c.column2")}

where 1=1

${if(detail='True',"","group by a.column1,a.column2,b.column3")}

${if(detail='True',"order by a.column1,a.column2,b.column3","")}

試一下動態取就好了,因為你兩個數據集where條件都是一樣的這樣寫可能簡單點,速度也不會有影響

  • 6关注人数
  • 146浏览人数
  • 最后回答于:2024-12-3 10:49
    请选择关闭问题的原因
    确定 取消
    返回顶部