[英]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;
我的預期結果是:
我得到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.