历史版本1 :多选下拉树实现多值查询 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

一、需求描述编辑

下拉树中分别有 地区,省份,城市 指标,如果想实现同时选择查询出多个城市的数据,如何实现呢?

如图:
222

二、实现思路编辑

我们可以通过帆软内置的REPLACE()SUBSTITUTE()函数来实现。

REPLACE():

REPLACE(text, texttoreplace, replacetext):根据指定字符串,用其他文本来代替原始文本中的内容。 text:需要被替换部分字符的文本或单元格引用。 texttoreplace:指定的字符串或正则表达式。 replacetext:需要替换部分旧文本的文本。 

SUBSTITUTE():

SUBSTITUTE(text,old_text,new_text,instance_num): 用new_text替换文本串中的old_text。 Text:需要被替换字符的文本,或含有文本的单元格引用。 Old_text:需要被替换的部分文本。 New_text:用于替换old_text的文本。 Instance_num:指定用new_text来替换第几次出现的old_text。如果指定了instance_num,则只有指定位置上的old_text被替换,否则文字串中出现的所有old_text都被new_text替换。 备注: 如果需要替换文本串中的指定文本,则使用SUBSTITUTE函数;如果需要替换文本串中指定位置上的任意文本,则使用REPLACE函数。 

三、示例编辑

3.1 准备报表

打开 %FR_HOME%\WebReport\WEB-INF\reportlets\demo\parameter\下拉树与动态显示查询按钮.cpt 报表,勾选上 地区控件的【多选】【结果返回叶子节点】,去掉【结果返回完整层次路径】

如图:
222

3.2 调整SQL

将ds1的sql语句做如下调整。

222

SELECT * FROM S订单 as 订单 where 货主地区 is not null ${if(type='date', " and date(订单.订购日期) >= '" + 开始日期 + "' and date(订单.订购日期)<='" + 结束日期 + "'", "")} ${if(type='month', " and cast(strftime('%m',订单.订购日期) as int) = "+ 月 + " and strftime('%Y',订单.订购日期) = '" + 年+"'", "")} ${if(type='year', " and strftime('%Y',订单.订购日期) = '" + 年+"'", "")} ${if(len(是否已付)==0,"","and 是否已付 in ('"+是否已付+"')")} ${if(len(地区)=0,"","and 货主城市 in ('"+SUBSTITUTE(地区,",","','")+"')")} ${if(len(客户)==0,"","and 客户ID in ('"+客户+"')")}

注:此操作是为了将返回值由分隔符[,]改成[',']形式。例如:A,B → A','B

※:红色区域也可由 ${if(len(地区)=0,"","and 货主城市 in ('"+SUBSTITUTE(地区,",","','")+"')")}  一样的效果。

保存报表并预览。
如图:
222