求教一下:case when语句可以代替if写含参语句吗?

截图的sql是Java里面的写法,我在帆软中用if语句改了好几次,跑是能跑,但数据不对,又用case when试过,sql直接报错了,所以特来求助

1.png

含参部分.rar

FineReport 生活不易 发布于 2023-10-11 13:38 (编辑于 2023-10-11 14:47)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
生活不易Lv3见习互助
发布于2023-10-11 19:18

尝试了一下午,都是报错的,个人感觉应该是无法插入动态参数,后来改用的JS传参。后续若有大佬写出来了,还望留言指点一下迷津,先给大佬磕一个了

最佳回答
0
snrtuemcLv8专家互助
发布于2023-10-11 13:40

这个你不是动态参数,固定的是可以用casewhen替换的

  • 生活不易 生活不易(提问者) 大佬,我上传了截图部分的语句文件,请你指点一下可以吗
    2023-10-11 14:03 
最佳回答
0
用户k6280494Lv6资深互助
发布于2023-10-11 13:41

select 

${if(a=0,字段1,字段2)}

from b

最佳回答
0
Harry768Lv6见习互助
发布于2023-10-11 13:54

可以

  • 生活不易 生活不易(提问者) 大佬,我上传了截图部分的例子,请你指点一下可以吗?
    2023-10-11 14:03 
最佳回答
0
快乐星光Lv5中级互助
发布于2023-10-11 14:41(编辑于 2023-10-11 15:44)

where 1=1

and

case when '${orgtype}'='002' and '${gpk_orgtype}'='002' then 

                                           (case when '${orgid}'='1' and '${gpk_orgid}'='1' then '1' else ct.revise_org_id end)

when '${orgtype}'='003' and '${gpk_orgtype}'='003' then 

                                           (case when '${orgid}'='1' and '${gpk_orgid}'='1' then '1' else ta.trans_org end)     

else (case when '${orgid}'='1' and '${gpk_orgid}'='1' then '1' else ta.complained_company1 end) end

case when '${orgid}'='1' and '${gpk_orgid}'='1' then '1' else '${orgid}' end

  • 生活不易 生活不易(提问者) 感谢大佬分享的方法,但大佬,我这个不是存储过程,截图的sql是Java里面的写法,我在帆软中用if语句改了好几次,跑是能跑,但数据不对,所以特来求助
    2023-10-11 14:45 
  • 快乐星光 快乐星光 回复 生活不易(提问者) 看修改答案,试一下可以不
    2023-10-11 15:45 
  • 生活不易 生活不易(提问者) 回复 快乐星光 大佬,报错了,报错内容是:ORA-00932:inconsistent datatypes
    2023-10-11 19:06 
  • 生活不易 生活不易(提问者) 大佬,由于表中没有字段接收传递的机构类型和机构参数,所以改用JS传参,具体方法是这样: 1、现在参数面板那添加一个名为gpk_orgIdSql的文本框控件; 2、在查询按钮这里增加点击事件,js如下: let gpk_orgId = this.options.form.getWidgetByName(\"gpk_orgId\").getValue();//机构id let gpk_orgType = this.options.form.getWidgetByName(\"gpk_orgType\").getValue();//机构类型 let gpk_orgIdSql = \'\'; if (!!gpk_orgId && gpk_orgId !== \'1\') { if (!!gpk_orgType && gpk_orgType === \'001\') { gpk_orgIdSql = \" TA.complained_company1=\" + gpk_orgId; } else if (!!gpk_orgType && gpk_orgType === \'002\') { gpk_orgIdSql = \" CT.REVISE_ORG_ID=\" + gpk_orgId; } else{ gpk_orgIdSql = \" TA.TRANS_ORG=\" + gpk_orgId; } } _g().parameterEl.getWidgetByName(\"gpk_orgIdSql\").setValue(gpk_orgIdSql); 补充说明:getValue()获取的是控件实际值,getText()获取的是控件显示值,可以根据实际需求调整一下
    2023-10-11 19:14 
  • 快乐星光 快乐星光 回复 生活不易(提问者) 报这个错说明逻辑是对的,但是‘1’和你的数据库表的字段类型不兼容。你把‘1’改成‘’(空)或者直接1试一下。
    2023-10-12 08:26 
  • 3关注人数
  • 390浏览人数
  • 最后回答于:2023-10-11 19:18
    请选择关闭问题的原因
    确定 取消
    返回顶部