sql数据源多选参数or条件如何书写

6020
10

伶俐 数据达人Lv4

发表于2019-3-6 17:12

悬赏1

已解决

楼主
本帖最后由 伶俐 于 2019-3-6 17:15 编辑

求助社区的大神们,在写sql数据源的时候,参数单选的时候,我用
if(@hkzt='02',"(DD.FACT_REPAY_DATE is null)",if(@hkzt='03',"DD.IS_REPAYED='3'","DD.FACT_REPAY_DATE is not null AND DD.IS_REPAYED<>'3'")))#>  实现了对结果集的筛选,现在准备需求变更,想要实现多选,多选的时候 用 or 连接每一个条件,除了用IF条件一个一个列举,有没有什么好的办法来写这个sql,   具体需要实现的条件如下:

已还 01  DD.FACT_REPAY_DATE is not null AND DD.IS_REPAYED<>'3'

未还 02
DD.FACT_REPAY_DATE is null

部分已还 03
DD.IS_REPAYED='3'




万分感谢~~~



最近看过此主题的会员

jrjrjr

esen_4XL2IVJCG8

esen_5ECRL65J0A

esen_4TU4L1BV1N

esen_4XMY0N6IMU

hee

esen_5D2I3EPT4Y

naqinga

brave0520

keer_

最佳答案
伶俐 发表于 2019-3-6 17:48
现在这个要实现是这样的,首先 要多选,然后当参数选择‘01时’,执行下面的sql
DD.FACT_REPAY_DATE is  ...

这个确实好复杂啊,我能想到的确实也只有if表达式了
10个回答

只看楼主

缱绻 数据领袖Lv6

发表于2019-3-6 17:14

只看该作者

取消 关注该作者的回复

沙发

这个问题跟之前不是一样的么。我记得好像问过的呀

伶俐 数据达人Lv4

发表于2019-3-6 17:16

只看该作者

取消 关注该作者的回复

板凳

缱绻 发表于 2019-3-6 17:14
这个问题跟之前不是一样的么。我记得好像问过的呀

之前的是五级分类,是同一个字段,可以直接用in连接,这次是不同的判断条件

缱绻 数据领袖Lv6

发表于2019-3-6 17:20

只看该作者

取消 关注该作者的回复

地板

伶俐 发表于 2019-3-6 17:16
之前的是五级分类,是同一个字段,可以直接用in连接,这次是不同的判断条件 ...

能举个例子不?

伶俐 数据达人Lv4

发表于2019-3-6 17:20

只看该作者

取消 关注该作者的回复

5#

缱绻 发表于 2019-3-6 17:14
这个问题跟之前不是一样的么。我记得好像问过的呀

之前是多选,对于同一个字段进行判断,我们用<#=if(@zcfl='','1=1'," MM.FIVE_CLASS in ('" +replaceregex(@zcfl,"\|","','") +" ')")#>  这个解决了,这次需要修改的是 不同的 多选对应的条件是不一样的,我本来想直接用if 写,把每一个排列组合写出来,但是 BI好像对先后顺序 也有规定,排列组合 下来 要写的sql 就特别长,所以想问问有没有什么好的办法

缱绻 数据领袖Lv6

发表于2019-3-6 17:31

只看该作者

取消 关注该作者的回复

6#

伶俐 发表于 2019-3-6 17:20
之前是多选,对于同一个字段进行判断,我们用  这个解决了,这次需要修改的是 不同的 多选对应的条件是不 ...

之前的场景清楚了,但是对于你目前遇到问题的这个场景还是有点不太清楚哎。

伶俐 数据达人Lv4

发表于2019-3-6 17:48

只看该作者

取消 关注该作者的回复

7#

缱绻 发表于 2019-3-6 17:31
之前的场景清楚了,但是对于你目前遇到问题的这个场景还是有点不太清楚哎。 ...

现在这个要实现是这样的,首先 要多选,然后当参数选择‘01时’,执行下面的sql
DD.FACT_REPAY_DATE is not null AND DD.IS_REPAYED<>'3'

当参数为 02 ,执行下面的sql
DD.FACT_REPAY_DATE is null

当参数为 03 ,执行下面的sql
DD.IS_REPAYED='3'

当参数为01,02 ,执行
(DD.FACT_REPAY_DATE is not null AND DD.IS_REPAYED<>'3') or DD.FACT_REPAY_DATE is null

以此类推。。。
你看有什么好的办法可以实现么

缱绻 数据领袖Lv6

发表于2019-3-6 17:12

只看该作者

取消 关注该作者的回复

8#

伶俐 发表于 2019-3-6 17:48
现在这个要实现是这样的,首先 要多选,然后当参数选择‘01时’,执行下面的sql
DD.FACT_REPAY_DATE is  ...

这个确实好复杂啊,我能想到的确实也只有if表达式了

伶俐 数据达人Lv4

发表于2019-3-6 17:53

只看该作者

取消 关注该作者的回复

9#

缱绻 发表于 2019-3-6 17:50
这个确实好复杂啊,我能想到的确实也只有if表达式了

嗯嗯,我想到的也是用if 表达式,现在只有3个选项还好,如果是10个,排列组合起来就太多了

伶俐 数据达人Lv4

发表于2019-3-6 17:54

只看该作者

取消 关注该作者的回复

10#

缱绻 发表于 2019-3-6 17:50
这个确实好复杂啊,我能想到的确实也只有if表达式了

嗯嗯,好哒,谢谢你啦,我这暂时先用IF表达式解决吧

缱绻 数据领袖Lv6

发表于2019-3-6 17:59

只看该作者

取消 关注该作者的回复

11#

伶俐 发表于 2019-3-6 17:54
嗯嗯,好哒,谢谢你啦,我这暂时先用IF表达式解决吧

不客气的,也没帮到你什么

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

400咨询:400-0011-866

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号