SQL使用AND和OR组合

时间:2019-06-20 12:15:24

标签: sql oracle

我正在使用Oracle 10g。表单中包含3个字段:

from date
To date 
Customer

我有一个包含customerdelivery nodate的表格。我要显示以下情况的报告:

  1. 用户可以输入fromto date-然后显示所有详细信息,而与customer名称无关
  2. 用户只能提供customer的名称-然后显示基于customer的详细信息,而不考虑日期
  3. 用户可以提供from dateto datecustomer-然后显示该日期的customer的详细信息

我必须根据这些情况向报告显示如何编写该查询。

我将从表单中将值传递给报表构建器

SELECT  A.DEL_NO,
        A.DEL_DATE, 
        A.CONS_ADDR
FROM    ITBG_DELCHELLAN A
where   A.oano is null
and     A.DEL_date between :sdate and :edate 
OR      UPPER(A.cons_addr) like '%'||:adr||'%';

其中sdatefrom dateedateto dateadrcustomer

1 个答案:

答案 0 :(得分:1)

我想你想要

SELECT  A.DEL_NO,
        A.DEL_DATE, 
        A.CONS_ADDR
FROM    ITBG_DELCHELLAN A
WHERE   A.oano is null
AND     ( :sdate IS NULL OR :edate IS NULL OR A.DEL_date BETWEEN :sdate AND :edate )
AND     ( :adr IS NULL OR UPPER(A.cons_addr) LIKE '%'||:adr||'%' )
-- Prevent returning everything if neither option is given.
AND     ( ( :sdate IS NOT NULL AND :edate IS NOT NULL ) OR :adr IS NOT NULL )