无法在动态SQL中使用CASE表达式

-3 sql sql-server-2008

在以下查询中,t2.stock它有两个值(1和0).我希望1值输出为IN和0值为OUT.问题是我不能CASE在这种类型的查询中使用表达式.有没有办法做到这一点?

use DB1  
go

declare @SQL varchar(500),

Set @SQL=' select t1.ID,t1.Name,t2.stock 
    from table1 t1 
        inner join table2 t2 on t1.ID = t2.ID'

exec (@SQL)
Run Code Online (Sandbox Code Playgroud)

And*_*y M 5

如果通过这种类型的查询,您意味着动态查询,那么您可能对动词CASE查询和/或动态查询有一些误解.通常,CASE在动态查询中使用表达式是没有问题的,其中一个例子可以在@Gordon Linoff的答案中看到.

但是,如果你绝对坚持,还有就是在您的情况一种替代方案:

use DB1  
go

declare @SQL varchar(500);

Set @SQL=' select t1.ID, t1.Name, v.description as stock
    from table1 t1 
        inner join table2 t2 on t1.ID = t2.ID
        inner join (
           values (1, ''IN''),
                  (0, ''OUT'')
        ) t2 (stock, description) on t2.stock = v.stock
';
exec (@SQL);
Run Code Online (Sandbox Code Playgroud)