1

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

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

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

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

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

  1. 如果提供了中间名(非空),则返回匹配的中间名并且中间名为空

    例如,如果用户输入 'Ronald' 结果应该是

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

    例如,如果用户在中间名字段中没有输入任何内容,则结果应该是

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

到目前为止,我有以下 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 中同时满足这两种条件?如果是这样,我该如何实现它?

4

0 回答 0