首页 > 解决方案 > SQL 使用 AND , OR 组合

问题描述

我正在使用oracle 10g。表格中有3个字段:

from date
To date 
Customer

我有一张桌子,里面有customer,delivery nodate。我想显示具有以下条件的报告:

  1. 用户可以给出-from然后to date它会显示所有详细信息,而不管customer名称如何
  2. 用户只能给出customer名称 - 然后它会根据customer日期显示详细信息
  3. 用户可以给出from dateto date然后customer- 然后它会customer在特定日期显示 with 的详细信息

我必须根据这些条件显示如何编写该查询的报告。

从表单中,我会将值传递给报告生成器

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

标签: sqloracle

解决方案


我想你想要:

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 )

推荐阅读