在以下查询中,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)
答案 0 :(得分:5)
如果通过此类查询表示动态查询,那么您可能对CASE
和/或动态查询存在一些误解。通常,在动态查询中使用CASE
表达式没有问题,其中的一个示例可以在@Gordon Linoff's answer中看到。
但是,如果你绝对坚持, 可以替代你的情况:
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);
答案 1 :(得分: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)