簡體   English   中英

Oracle CASE表達式混亂

[英]Oracle CASE expression confusion

誰能告訴我下面的查詢有什么問題?

select case 
         when ANALYSISCODE is null and
              studydomainmdata.studydomainmetadataid > 0
           then 'CD'  
         when ANALYSISCODE is null and
              studydomainmdata.studydomainmetadataid < 0
           then 'CD1'  
         when analysiscode is not null
           then ANALYSISCODE
         else 'N/A'
       end as ANALYSISCODE
from studyanalysis
inner join (slmetadata
              inner join studydomainmdata 
                on slmetadata.slmetadataid = studydomainmdata.slmetadataid and
                   studydomainmdata.studydomainmetadataid=-9)
  on studyanalysis.analysisid = slmetadata.analysisid;

我的預期結果是:

  • 如果studydomainmetadataid小於0,則為CD1
  • CD如果studydomainmetadataid> 0(i,e 85)
  • 'xxx'如果ANALYSISCODE不為空

我得到null ANALYSISCODE。

我猜你的查詢根本沒有返回任何東西,因此CASE沒有被測試,你沒有得到任何結果返回(甚至沒有你的ELSE默認值)。

要測試這個猜測,請使用SELECT COUNT(*) FROM包裝查詢,如下所示:

SELECT count(*) FROM 
(
select case           
       when ANALYSISCODE is null and studydomainmdata.studydomainmetadataid > 0
       then 'CD'
       when ANALYSISCODE is null and studydomainmdata.studydomainmetadataid < 0
       then 'CD1'
       when analysiscode is not null
       then ANALYSISCODE
       else 'N/A'
       end as ANALYSISCODE 
  from studyanalysis 
 inner join (slmetadata 
             inner join studydomainmdata 
                     on slmetadata.slmetadataid = studydomainmdata.slmetadataid 
                    and studydomainmdata.studydomainmetadataid=-9)
    on studyanalysis.analysisid = slmetadata.analysisid
)

如果count(*)返回0那么我的猜測是正確的,並且您的查詢根本不返回任何數據,因此為null值。

CASE語句只能用於查詢返回的記錄,如果沒有重新記錄的記錄,則不執行CASE

希望能幫助到你...

暫無
暫無

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

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