请问怎么在pb 中多条件实现优先查询

lzbfilm 2016-08-22 11:58:44

如图
系统默认查询优先级变更备注>系统备注>报告送达
如果没有变更备注,那么就看系统备注,最后在看报告送达
怎么实现三个条件都是自取的时候,查询出来2,3,4这3条记录
...全文
632 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzbfilm 2016-09-19
  • 打赏
  • 举报
回复
引用 8 楼 lzp_lrp 的回复:
[quote=引用 7 楼 lzbfilm 的回复:] [quote=引用 3 楼 lzbfilm 的回复:] [quote=引用 1 楼 opet98765 的回复:] select * from customer_report where (isnull(mark,isnull(xtbz,isnull(bgsd,''))) like '%自取%') or (isnull(mark,'')='' and isnull(xtbz,isnull(bgsd,'')) like '%自取%') or (isnull(mark,'')='' and isnull(xtbz,'')='' and isnull(bgsd,'') like '%自取%' )
我发现如果有NULL空置,结果就不准了,应该怎么改呢?[/quote] 我自己已经弄好了,一种是代码不变把数据库中xtbz里面的NULL改成空白,还有一种是代码第二行中改成(isnull(mark,'')=NULL and isnull(xtbz,isnull(bgsd,'')) like '%自取%')就好了[/quote] 这么写也可以,但数据量大时是用不到索引的,非常不优化 在前台用setfilter更好一些 string ls_filter ls_filter = "(mark like '%自取%') or " ls_filter += "(xtbz like '%自取%') or " ls_filter += "(bgsd like '%自取%')" dw_1.setfilter(ls_filter) dw_1.filter()[/quote] 你好,我是新手,我想问问,我现在是直接用sql where的方式查询的,这样是不是效率低?也用不了索引吗?还有,你上面这种没有优先级,不行的,我要实现首先查看mark中的记录,没有之后在查找xtbz的内容,最后前面都没有才用bgsd中的内容,也就是说如果mark中符合条件了,xtbz和bgsd后面不管是什么都不用管,同理如果mark为空,那么就找xtbz的,如果找到后,不管bgsd是什么都不用管
WorldMobile 2016-09-12
  • 打赏
  • 举报
回复
引用 楼主 lzbfilm 的回复:
如图 系统默认查询优先级变更备注>系统备注>报告送达 如果没有变更备注,那么就看系统备注,最后在看报告送达 怎么实现三个条件都是自取的时候,查询出来2,3,4这3条记录
这个可以用setfilter来实现,代码如下 string ls_filter ls_filter = "( len(变更备注) > 0 ) or " ls_filter += "( len(系统备注) > 0 ) or " ls_filter += "( len(报告送达) > 0 )" dw_1.setfilter(ls_filter) dw_1.filter()
WorldMobile 2016-09-12
  • 打赏
  • 举报
回复
引用 7 楼 lzbfilm 的回复:
[quote=引用 3 楼 lzbfilm 的回复:] [quote=引用 1 楼 opet98765 的回复:] select * from customer_report where (isnull(mark,isnull(xtbz,isnull(bgsd,''))) like '%自取%') or (isnull(mark,'')='' and isnull(xtbz,isnull(bgsd,'')) like '%自取%') or (isnull(mark,'')='' and isnull(xtbz,'')='' and isnull(bgsd,'') like '%自取%' )
我发现如果有NULL空置,结果就不准了,应该怎么改呢?[/quote] 我自己已经弄好了,一种是代码不变把数据库中xtbz里面的NULL改成空白,还有一种是代码第二行中改成(isnull(mark,'')=NULL and isnull(xtbz,isnull(bgsd,'')) like '%自取%')就好了[/quote] 这么写也可以,但数据量大时是用不到索引的,非常不优化 在前台用setfilter更好一些 string ls_filter ls_filter = "(mark like '%自取%') or " ls_filter += "(xtbz like '%自取%') or " ls_filter += "(bgsd like '%自取%')" dw_1.setfilter(ls_filter) dw_1.filter()
lzbfilm 2016-09-12
  • 打赏
  • 举报
回复
引用 3 楼 lzbfilm 的回复:
[quote=引用 1 楼 opet98765 的回复:] select * from customer_report where (isnull(mark,isnull(xtbz,isnull(bgsd,''))) like '%自取%') or (isnull(mark,'')='' and isnull(xtbz,isnull(bgsd,'')) like '%自取%') or (isnull(mark,'')='' and isnull(xtbz,'')='' and isnull(bgsd,'') like '%自取%' )
我发现如果有NULL空置,结果就不准了,应该怎么改呢?[/quote] 我自己已经弄好了,一种是代码不变把数据库中xtbz里面的NULL改成空白,还有一种是代码第二行中改成(isnull(mark,'')=NULL and isnull(xtbz,isnull(bgsd,'')) like '%自取%')就好了
wzh2021 2016-09-07
  • 打赏
  • 举报
回复
楼上正解,接分
WMERP 2016-09-04
  • 打赏
  • 举报
回复
SQL获取的字段时候改成 isnull(mark,'') as mark 或者是在PB中filter加上isnull(mark) or mark=''
qq_1919561306 2016-08-22
  • 打赏
  • 举报
回复
select * from customer_report where (isnull(mark,isnull(xtbz,isnull(bgsd,''))) like '%自取%') or (isnull(mark,'')='' and isnull(xtbz,isnull(bgsd,'')) like '%自取%') or (isnull(mark,'')='' and isnull(xtbz,'')='' and isnull(bgsd,'') like '%自取%' )
lzbfilm 2016-08-22
  • 打赏
  • 举报
回复
引用 1 楼 opet98765 的回复:
select * from customer_report
where
(isnull(mark,isnull(xtbz,isnull(bgsd,''))) like '%自取%') or
(isnull(mark,'')='' and isnull(xtbz,isnull(bgsd,'')) like '%自取%') or
(isnull(mark,'')='' and isnull(xtbz,'')='' and isnull(bgsd,'') like '%自取%' )


我发现如果有NULL空置,结果就不准了,应该怎么改呢?
lzbfilm 2016-08-22
  • 打赏
  • 举报
回复
引用 1 楼 opet98765 的回复:
select * from customer_report
where
(isnull(mark,isnull(xtbz,isnull(bgsd,''))) like '%自取%') or
(isnull(mark,'')='' and isnull(xtbz,isnull(bgsd,'')) like '%自取%') or
(isnull(mark,'')='' and isnull(xtbz,'')='' and isnull(bgsd,'') like '%自取%' )



你好,我原来的方法日期,人员,部门,等这些是用的dw setfilter()来过滤的,那我该怎么检索呢?怎么用insertrow()插入到一个新的dw里面在检索出来呢?

609

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧