-3

在以下查询中,t2.stock它有两个值 (10)。我想要 1 值输出 asIN0value as 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)
4

2 回答 2

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);
于 2013-03-19T14:35:33.360 回答
0

但是您可以在动态 SQL 中使用case语句:

use DB1  
go

declare @SQL varchar(500),

Set @SQL='
select t1.ID, t1.Name, (case when t2.stock = 1 then ''IN'' else ''OUT'' end) as stock
from table1 t1 
     inner join table2 t2 on t1.ID = t2.ID
'

exec (@SQL)
于 2013-03-19T14:07:01.393 回答