有人能告诉我下面的查询有什么问题吗?
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;
我的预期结果是:
我得到的是来自ANALYSISCODE。
答案 0 :(得分:1)
我猜你的查询根本没有返回任何内容,因此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
,那么我的猜测是正确的,并且您的查询根本没有返回任何数据,因此为空值。
CASE
语句只能用于查询返回的记录,如果没有重新调整的记录,则CASE
不会被执行。
希望它有所帮助...