Sql查询Case语句

时间:2015-03-02 22:32:47

标签: sql-server tsql case union

我尝试编写查询(Microsoft SQL SERVER),如下所示:

select  productid from T1 
union 
select  productid from T2 
union 
select ProductID from T3

问题在于我希望那个联盟中的一个将依赖于一个值(比方说@x) 所以,我写这个查询:

select case when @x=1 then  productid end 
from T1 
union 
select  productid from T2 
union 
select ProductID from T3

但它仍在扫描所有T1。

我知道"案例"扫描表即使它与条件不匹配: 当1 = 2时选择case,然后从T1开始生产 如果执行或不执行,我如何编写基于值的查询? 比如:case @ x = 1然后从T1结束选择productid .... *我需要找到一种没有动态sql的方法 谢谢

2 个答案:

答案 0 :(得分:0)

使用它:

Declare @SQL nvarchar(max)

Set @SQL = N' select  productid From T1 '
Set @SQl = @SQL + N' UNION select  productid From T2'
if(@x=1)
Set @SQl = @SQL + N' UNION select  productid From T3'

exec (@SQL)

答案 1 :(得分:0)

非常感谢你的帮助, 我设法按照Pieter的建议,使用where子句。查询看起来像

select productid from t1 union select productid from t2
union select productid from t3 inner join t4 on t3.id=t4.t3id where t3.value=@x

虽然我不想使用t4表(因为@x是每个t3一个) 谢谢大家。