替代CASE的方法

时间:2023-01-15 22:44:37

CASE是一个标量表达式,根据条件逻辑返回一个值,既然是表达式,就不能当是一条语句来控制逻辑的流程。

今天在网上看到一帖:http://topic.csdn.net/u/20110123/10/abbfd3ce-a858-4daa-bb25-167b2ed3e7f4.html?5083

替代CASE的方法

 

根据上帖,创建一个表,并填充数据:

CREATE   TABLE  t
(
    a 
NVARCHAR ( 10 ),
    b 
NVARCHAR ( 10 )
)

INSERT   INTO  t  VALUES  ( ' 001 ' , ' y ' )
INSERT   INTO  t  VALUES  ( ' 002 ' , ' n ' )
INSERT   INTO  t  VALUES  ( ' 003 ' , ' y ' )
INSERT   INTO  t  VALUES  ( ' 004 ' , ' y ' )

 

 为了演示不使用CASE表达式,得到使用CASE表达式相同的效果,可以先创建一个辅助表:

CREATE   TABLE  s
(
    c 
nvarchar ( 10 ),
    d 
nvarchar ( 10 )
)

INSERT   INTO  s  VALUES ( ' y ' ,N ' ' )
INSERT   INTO  s  VALUES ( ' n ' ,N ' ' )

 

最后是使用这个辅助表与需要处理的表串联即可得到:

SELECT  a,d  FROM  t  RIGHT   JOIN  s  ON  (t.b  =  s.c)  ORDER   BY  t.a

 
执行结果:

替代CASE的方法