SQL - 提供值时返回Null值

时间:2015-06-29 04:41:44

标签: sql bi-publisher

我正在BI Publisher中开发一个报告,该报告接受用户输入作为搜索条件,并将结果呈现为pdf模板。用户输入用作我必须进行搜索的SQL查询中的参数

我正在使用以下数据进行测试

PER_FNAME   PER_MNAME   PER_LNAME
Stuart      Easterly    Adams
Stuart      Ronald      Adams
Stuart      Ronald      Adams
Stuart                  Adams
Stuart                  Adams

结果基于用户输入,需要符合以下规则/条件:

用户将输入中间名或将其留空(null)

  1. 如果提供了中间名(非空),则返回中间名称,其中存在匹配且中间名称为空

    E.g。如果用户输入'Ronald',结果应为

    PER_FNAME   PER_MNAME   PER_LNAME
    Stuart      Ronald      Adams
    Stuart      Ronald      Adams
    Stuart                  Adams
    Stuart                  Adams
    
  2. 如果中间名为null,则返回所有中间名称值,包括null

    E.g。如果用户在中间名称字段中不输入任何内容,则结果应为

    PER_FNAME   PER_MNAME   PER_LNAME
    Stuart      Easterly    Adams
    Stuart      Ronald      Adams
    Stuart      Ronald      Adams
    Stuart                  Adams
    Stuart                  Adams
    
  3. 到目前为止,我有以下sql

        SELECT 
          PER_FNAME,
          PER_MNAME,
          PER_LNAME
          FROM
          (SELECT   
            Asset.ASSET_NUM AS BN_REN
            FROM SIEBEL.S_ASSET Asset
            WHERE
            Asset.NAME = 'Business Names'
            AND Asset.status_cd = 'Registered'
          ) Q1
    
          LEFT JOIN 
    
         (SELECT 
           Asset.ASSET_NUM AS PER_ASSET,
           Contact.FST_NAME AS PER_FNAME,
           Contact.MID_NAME AS PER_MNAME,
           Contact.LAST_NAME AS PER_LNAME
           FROM siebel.s_asset_con aCon, siebel.s_asset Asset, siebel.s_contact Contact
           WHERE Asset.row_id = aCon.asset_id
           AND aCon.CONTACT_ID = Contact.ROW_ID
         ) Q2
    
        ON Q1.BN_REN = Q2.PER_ASSET
    
        WHERE 
          PER_FNAME = NVL(:FIRST_NAME, PER_FNAME)
          AND (PER_MNAME IS NULL OR PER_MNAME = :MID_NAME)
          AND PER_LNAME = NVL(:LAST_NAME, PER_LNAME)
    

    如果用户输入中间名称,结果与预期一致,我得到空值和正确值。但是,当没有为中间名输入任何内容时,我只获得空值而不是所有值。

    有没有办法满足一个sql中的两个条件?如果是的话,我该如何实现呢?

0 个答案:

没有答案