0

我有一个表,我正在尝试使用多个条件运行查询

select POLICY_REFER,
       END_REFER,
       CLIENT_NAME,
       POLICY_PRODUCT,
       ISSUE_DATE,
       GROSS,
       DOC_TYPE,
       DOC_STATUS
from   POLICY_MASTER
  1. ISSUE_DATE BETWEEN: DFrom AND: DTo

  2. DOC_STATUS = '停车'

这两个条件必须符合

  1. CLIENT_NAME =:Client 或 CLIENT_NAME 为空

  2. POLICY_PRODUCT =:产品或 POLICY_PRODUCT 为空

这两个取决于从组合框中的选择,为此我写了这个

select POLICY_REFER,
       END_REFER,
       CLIENT_NAME,
       POLICY_PRODUCT,
       ISSUE_DATE,
       GROSS,
       DOC_TYPE,
       DOC_STATUS
from   POLICY_MASTER
where  ISSUE_DATE BETWEEN :DFrom AND :DTo
and    CLIENT_NAME = :Client or CLIENT_NAME is null
and    POLICY_PRODUCT = :Product or POLICY_PRODUCT is null
and    DOC_STATUS = 'Parked'".... 

此查询可以接受 POLICY_PRODUCT 为空,但不能使用 CLIENT_NAME 为空...

4

2 回答 2

1

我怀疑问题是您的or条件周围缺少括号,例如,我认为您的查询应该类似于以下内容:

select POLICY_REFER,
       END_REFER,
       CLIENT_NAME,
       POLICY_PRODUCT,
       ISSUE_DATE,
       GROSS,
       DOC_TYPE,
       DOC_STATUS
from   POLICY_MASTER
where  ISSUE_DATE BETWEEN :DFrom AND :DTo
and    (CLIENT_NAME = :client or :client is null)
and    (POLICY_PRODUCT = :product or :product is null)
and    DOC_STATUS = 'Parked'".... 
于 2018-11-06T08:33:07.937 回答
0

查询似乎工作正常。我认为问题出在 CLIENT_NAME 列的属性上,检查该列的属性是否存在,因为在查询中存在不允许空值的属性

select POLICY_REFER,
       END_REFER,
       CLIENT_NAME,
       POLICY_PRODUCT,
       ISSUE_DATE,
       GROSS,
       DOC_TYPE,
       DOC_STATUS
from   POLICY_MASTER
where  (ISSUE_DATE BETWEEN :DFrom AND :DTo)
and    (CLIENT_NAME = :Client or CLIENT_NAME is null)
and    (POLICY_PRODUCT = :Product or POLICY_PRODUCT is null)
and    DOC_STATUS = 'Parked'"
于 2018-11-06T08:51:41.680 回答