帆软${if}嵌套${if}

数据集里面${if}嵌套${if},写的格式是:

if()直接嵌套,然后最外面加上${}

${if(,,if(,,))}。

但是里层的if里面不能加几个AND过滤条件,否则无法实现不选等于全选的total功能,请问这种有什么好的办法解决吗?具体如下:

select data_class,year_,month_,item_type,item_type_F,area_1_channel,area_2_channel,area_2_channel_F,sale_type_class,

       case when data_class='${数据类型1}' then qty else 0 end as 销量,

       case when data_class='${数据类型2}' then qty else 0 end as 实际销量,

   case when data_class='${数据类型1}' then rev else 0 end as 收入,

       case when data_class='${数据类型2}' then rev else 0 end as 实际收入,

       case when data_class='${数据类型1}' then end_gp else 0 end as 毛利额,

       case when data_class='${数据类型2}' then end_gp else 0 end as 实际毛利额

from 

(

select data_class,year_,month_,item_type,item_type as item_type_F,area_1_channel,area_2_channel,area_2_channel as area_2_channel_F,sale_size,sale_type_class,qty,rev,end_gp

from O_IFS_CBG_UNION_OBG_DUAN2DUAN

union all

select data_class,year_,month_,item_type,'CBG_OBG' as item_type_F,area_1_channel,area_2_channel,'total' as area_2_channel_F,sale_size,sale_type_class,qty,rev,end_gp  

from O_IFS_CBG_UNION_OBG_DUAN2DUAN

) a

where data_class in ('${数据类型1}','${数据类型2}') 

and year_='${年}' 

and month_='${月}' 

and 1=1 ${if(项目类别='CBG_OBG',"AND item_type_F='CBG_OBG'",

 if(len(二级渠道_国家)==0,"AND item_type_F='"+项目类别+"' and area_1_channel = '"+一级渠道_区域+"' and area_2_channel_F ='"+"total"+"'",

 "AND item_type_F='"+项目类别+"' and area_1_channel = '"+一级渠道_区域+"'and area_2_channel_F ='"+二级渠道_国家+"'")  )}

无法实现,如若删掉AND item_type_F='"+项目类别+"' and area_1_channel = '"+一级渠道_区域+"'过滤条件即可实现不选为全选的功能

FineReport Kya 发布于 2021-1-26 10:53
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
snrtuemcLv8专家互助
发布于2021-1-26 10:58

这边有问题,你的total是什么

image.png

  • Kya Kya(提问者) total是代表不选等于全选的意思,如果内层if只写一个and条件是可以执行成功的,如下: and 1=1 ${if(项目类别=\'CBG_OBG\',\"AND item_type_F=\'CBG_OBG\'\", if(len(二级渠道_国家)==0,\"and area_2_channel_F =\'\"+\"total\"+\"\'\",\"and area_2_channel_F =\'\"+二级渠道_国家+\"\'\") )} 但是这里面我还需要加两个AND条件,就不行了
    2021-01-26 11:07 
  • snrtuemc snrtuemc 回复 Kya(提问者) 问题就出在这里,不选代表全选,你就把这个过滤去掉不就是全选了
    2021-01-26 11:12 
  • Kya Kya(提问者) 大神,实现了,谢谢
    2021-01-26 11:14 
最佳回答
0
shirokoLv6资深互助
发布于2021-1-26 10:55(编辑于 2021-1-26 11:18)

按帆软逻辑的if条件 and用&&符号。

if(a=1&& b=2,1,2)

---

我弄明白了,你就是没整理好逻辑。

还有个疑点项目类别='CBG_OBG' 的时候是特殊情况吗?不需要用一级渠道二级渠道了?还是单纯写错了

  • Kya Kya(提问者) 试了一下&&。好像还是不行,我这个是写在数据集里面的,提示SQL命令未正确结束
    2021-01-26 11:07 
  • shiroko shiroko 回复 Kya(提问者) 你说的是if条件啊就是帆软逻辑的,你不会写到引号内了吧,引号内是到sql里面运行的。sql不识别&&就会报错
    2021-01-26 11:08 
  • Kya Kya(提问者) 回复 shiroko 我说的是数据集里面的if条件逻辑,也就是数据集里面的sql
    2021-01-26 11:11 
  • Kya Kya(提问者) \'CBG_OBG\'是特殊情况,不需要其他过滤条件了,是total的问题,已经解决了
    2021-01-26 11:21 
  • 3关注人数
  • 1785浏览人数
  • 最后回答于:2021-1-26 11:18
    请选择关闭问题的原因
    确定 取消
    返回顶部