簡體   English   中英

我應該在下面的查詢中更改什么?

[英]What should I change in the query below?

SELECT 
      ERI.ATTACK_CASE_ID, 
      LRM.REF_VALUE AS ATTACK_CASE_STATUS,
      WDR.RESTRICTION_NAME, 
    LL.USER_LABEL AS ***RESTRICTION_STATUS***,
     WSRI.RESTRICTION_DATE,
       CASE NVL(ERI.IS_PRIMARY, 0) WHEN 0 THEN 'No' ELSE CASE ERI.IS_PRIMARY WHEN 1 THEN 'Yes' ELSE 'No' END END AS PRIMARY
FROM ALERT A 
 LEFT OUTER JOIN ENTITY_RESTRICTION_INFO ERI ON A.ALERT_KEY=ERI.ENTITY_KEY
 LEFT OUTER JOIN LK_REFERENCE_MAPPING LRM ON LRM.REF_KEY= TO_CHAR(ERI.ATTACK_CASE_STATUS)
 LEFT OUTER JOIN LK_REFERENCE_CATEGORY LRG ON LRM.LK_REFERENCE_CATEGORY_ID = LRG.ID 
AND  LRG.CATEGORY_CODE = 'DD' 
AND LRG.SUB_CATEGORY_CODE='ATTACK_STATUS_ID_NAME'   
 LEFT OUTER JOIN WNORKOM_DD_RESTRICTION WDR ON ERI.RESTRICTION_ID=WDR.RESTRICTION_ID 
 LEFT OUTER JOIN WNORKOM_SAR_RESTRICT_INFO WSRI ON WSRI.RESTRICTION_ID=ERI.RESTRICTION_ID
 *LEFT OUTER JOIN LK_LOOKUPS LL ON LL.CODE=**WSRI.RESTRICTION_STATUS***
WHERE A.ALERT_KEY=121234 
AND ERI.ATTACK_CASE_ID='PP-123-0980'
AND LL.TYPE=9502

WSRI.RESTRICTION_STATUS中有某些值時,上面的查詢將返回所有記錄。

但是,當WSRI.RESTRICTION_STATUS = NULL時,它不返回RECORDS。 我可以在上面的查詢中添加/更改什么,以便當WSRI.RESTRICTION_STATUS = NULL時LL.USER_LABEL ='Unknown'。 僅供參考,LK_LOOKUPS表中沒有值“未知”。 這是我想在WSRI.RESTRICTION_STATUS = NULL時作為獨立字符串返回的內容。 向LL.CODE = NULL和LL.USER_LABEL ='Unknown'的LK_LOOKUPS表中添加一條記錄可能會使事情變得混亂,因此請幫助我在查詢中單獨傳遞它。

提前致謝。

試試( 編輯-根據評論 ):

SELECT 
      ERI.ATTACK_CASE_ID, 
      LRM.REF_VALUE AS ATTACK_CASE_STATUS,
      WDR.RESTRICTION_NAME, 
    DECODE ( WSRI.RESTRICTION_STATUS, NULL, 'Unknown', (SELECT USER_LABEL FROM LK_LOOKUPS LL WHERE LL.TYPE=9502 AND LL.CODE=WSRI.RESTRICTION_STATUS)) AS RESTRICTION_STATUS,
     WSRI.RESTRICTION_DATE,
       CASE NVL(ERI.IS_PRIMARY, 0) WHEN 0 THEN 'No' ELSE CASE ERI.IS_PRIMARY WHEN 1 THEN 'Yes' ELSE 'No' END END AS PRIMARY
FROM ALERT A 
 LEFT OUTER JOIN ENTITY_RESTRICTION_INFO ERI ON A.ALERT_KEY=ERI.ENTITY_KEY
 LEFT OUTER JOIN LK_REFERENCE_MAPPING LRM ON LRM.REF_KEY= TO_CHAR(ERI.ATTACK_CASE_STATUS)
 LEFT OUTER JOIN LK_REFERENCE_CATEGORY LRG ON LRM.LK_REFERENCE_CATEGORY_ID = LRG.ID 
AND  LRG.CATEGORY_CODE = 'DD' 
AND LRG.SUB_CATEGORY_CODE='ATTACK_STATUS_ID_NAME'   
 LEFT OUTER JOIN WNORKOM_DD_RESTRICTION WDR ON ERI.RESTRICTION_ID=WDR.RESTRICTION_ID 
 LEFT OUTER JOIN WNORKOM_SAR_RESTRICT_INFO WSRI ON WSRI.RESTRICTION_ID=ERI.RESTRICTION_ID
WHERE A.ALERT_KEY=121234 
AND ERI.ATTACK_CASE_ID='PP-123-0980'

添加LL.CODE = NULL的記錄對您沒有幫助,因為NULL = NULL始終為null(因此為false)。 您需要使用選擇表達式:

刪除LEFT OUTER JOIN LK_LOOKUPS LL ON LL.CODE=WSRI.RESTRICTION_STATUSAND LL.TYPE=9502 ,然后將LL.USER_LABEL AS RESTRICTION_STATUS,更改為:

IF(WSRI.RESTRICTION_STATUS IS NULL,
  "Unknown", 
  (SELECT USER_LABEL FROM LK_LOOKUPS LL
    WHERE LL.TYPE=9502 AND LL.CODE=WSRI.RESTRICTION_STATUS)
) AS USER_LABEL

聽起來您只需要將條件LL.Type = 9502移動到Left Join中,並在Select子句中使用Coalesce。 另外,由於您要將條件應用於Where子句中的Entity_Restriction_Info表中的列,因此您已將到該表的Left Join轉換為Inner Join,因此也可以使用Inner Join。

Select Eri.Attack_Case_Id
    , Lrm.Ref_Value As Attack_Case_Status
    , Wdr.Restriction_Name
    , Coalesce(LL.User_Label, 'Unknown') As Restriction_Status
    , Wsri.Restriction_Date
    , Case Nvl(Eri.Is_Primary, 0) 
        When 0 Then 'No' 
        Else Case Eri.Is_Primary 
                When 1 Then 'Yes' 
                Else 'No' 
                End 
        End As Primary
From Alert As A
    Inner Join Entity_Restriction_Info As Eri 
        On A.Alert_Key=Eri.Entity_Key
    Left Outer Join Lk_Reference_Mapping As Lrm 
        On Lrm.Ref_Key= To_Char(Eri.Attack_Case_Status)
    Left Outer Join Lk_Reference_Category As Lrg 
        On Lrm.Lk_Reference_Category_Id = Lrg.Id
            And  Lrg.Category_Code = 'Dd' 
            And Lrg.Sub_Category_Code='Attack_Status_Id_Name'   
    Left Outer Join Wnorkom_Dd_Restriction As Wdr 
        On Eri.Restriction_Id=Wdr.Restriction_Id 
    Left Outer Join Wnorkom_Sar_Restrict_Info As Wsri 
        On Wsri.Restriction_Id=Eri.Restriction_Id
    Left Outer Join Lk_Lookups As LL
        On LL.Code='Wsri.Restriction_Status'
            And LL.Type=9502
Where A.Alert_Key=121234 
    And Eri.Attack_Case_Id='Pp-123-0980'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM