0

我想将一个新列合并到一个有效的 SQL 查询中。

但是,它会导致整个查询根本不返回任何内容(因为该列在数据库中大部分为空)。

到目前为止,这是我的精简代码:

SELECT  DISTINCT     submittedRow.PERFORMED_DATE as "submitted",     
                     supervisorRow.PERFORMED_DATE as "superv",     
                   /* coalesce(sodRow.PERFORMED_DATE, TO_DATE('2000/07/07', 'YYYY/MM/DD') ) */ null AS "SOD"    


       hhs_umx_resp_activity submittedRow
       join hhs_umx_resp_activity supervisorRow ON supervisorRow.reg_request_id =  configRow.reg_request_id
       /* join hhs_umx_resp_activity sodRow  ON sodRow.reg_request_id = approvedRow.reg_request_id */ 


        left join  HHS_UMX_REG_REQUESTS hurr  on hurr.reg_request_id = hur.reg_request_id
               WHERE


               and supervisorRow.ACTIVITY_RESULT_CODE = 'ASP'

               AND submittedRow.activity_result_code = 'SBT'

           /*  AND sodRow.activity_result_code = 'ASD'*/

                and hur.REG_REQUEST_ID  IN ('262097')

我想添加的大部分为空的列是sodRow (这就是代码AND sodRow.activity_result_code = 'ASD'被注释的原因)。

每当我放回额外的 join forsodRow时,它只会将所有内容都归零,而我根本没有得到任何结果。但我希望它像NVLor一样工作COALESCE,如果它存在,它只显示该列,否则只显示其他所有内容。

我尝试先在代码中创建一个视图,然后再对其进行操作UNION。但似乎视图仅适用于 PL/SQL 代码。

我也尝试了外部连接,但这不起作用。

我认为问题可能出在WHERE我的加入代码的情况下。我确实喜欢 Dmitri 建议 belwo :

 AND nvl(sodRow.activity_result_code, 'ASD') = 'ASD'
 AND nvl(configRow.activity_result_code, 'ACL') = 'ACL'

或者:问题是它不会返回任何行。IE 如果我们正在寻找“ACL”,那么之前对“ASD”的检查变为真,并且会使下一次检查无用。

我想我只是无法想象连接是如何在这里工作的

, 谢谢 !

4

1 回答 1

2

也许你可以尝试左外连接

  left outer join hhs_umx_resp_activity sodRow  ON sodRow.reg_request_id = approvedRow.reg_request_id 

和nvl

  AND nvl(sodRow.activity_result_code, 'ASD') = 'ASD'

它将返回 sodRow.activity_result_code 中为 null 的记录或其中的“ASD”

于 2015-05-26T18:11:18.660 回答