3

谁能告诉我以下查询中有什么问题?

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;

我的预期结果是:

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

我得到空的 ANALYSISCODE。

4

1 回答 1

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,那么我的猜测是正确的,并且您的查询根本没有返回任何数据,因此是 null 值。

CASE语句只能对查询返回的记录起作用,如果没有重新调整的记录,CASE则不会执行。

希望能帮助到你...

于 2012-07-31T08:53:55.697 回答