日期:2014-05-17  浏览次数:20735 次

高手帮看看-----------为什么这个CASE WHEN无较?
本帖最后由 cowbobe 于 2013-10-28 11:57:52 编辑
很奇怪的问题,
这个代码在家里的SQL2000上执行可以,
但在公司的电脑上SQL2000执行就有问题,
主要是Case When后面的Else 无效,补丁SP4也打了,还是一样..

数据是一样的.
为什么在家里的电脑上,当ELSE时,是显示"未执行",而公司的电脑上就不显示,数据是有的,但
只显示<Null>.

怎么改啊?高人帮看下,什么问题..


select AppNo,ClientName,
(select case when AppNo<>'' then '已执行' else '未执行' end from OPA where appno=apply.appno) as '流程A',
(select case when AppNo<>'' then '已执行' else '未执行' end from OPB where appno=apply.appno) as '流程B'
 from apply





------解决方案--------------------
试试:
select?AppNo,ClientName,
(select?case?when?isnull(AppNo,'')<>''?then?'已执行'?else?'未执行'?end?from?OPA?where?appno=apply.appno)?as?'流程A',
(select?case?when?isnull(AppNo,'')<>''?then?'已执行'?else?'未执行'?end?from?OPB?where?appno=apply.appno)?as?'流程B'
?from?apply

------解决方案--------------------


select AppNo,ClientName,
(select case when  AppNo  isnull then '已执行' else '未执行' end from OPA where appno=apply.appno) as '流程A',
(select case when AppNo isnull  then '已执行' else '未执行' end from OPB where appno=apply.appno) as '流程B'
 from apply


is null 和<>'' 是有很大的区别的,你用这两种情况多试下结果就会发现的 
------解决方案--------------------

select a.AppNo,a.ClientName,case when ISNULL(b.appno,'')<>'' then '已执行' else '未执行' end as '流程A',
                            case when ISNULL(c.appno,'')<>'' then '已执行' else '未执行' end as '流程B',
 from apply a left join opa b on a.appno=b.appno
              left join opb c on a.appno=c.appno 

------解决方案--------------------
修正楼上最后多了个,号

select a.AppNo,a.ClientName,case when ISNULL(b.appno,'')<>'' then '已执行' else '未执行' end as '流程A',
                            case when ISNULL(c.appno,'')<>'' then '已执行' else '未执行' end as '流程B'
 from apply a left join opa b on a.appno=b.appno
              left join opb c on a.appno=c.appno 

------解决方案