2016-05-16 105 views
0

试图在WHERE子句中使用CASE语句,它给我提供了错误。我错过了什么?CASE语句在WHERE子句不工作我错过了什么?

SELECT DISTINCT 
     Commodity, 
     Commodity_ID, 
     [Description], 
     Train, 
     Truck 
FROM dbo.List_Commodity 
WHERE 
     CASE WHEN @Truck = 1 THEN 
      Truck = @Truck 
     WHEN @Train = 1 THEN 
      Train = @Train 
     END 
+1

T-SQL中的CASE是一个**表达式**,它返回**几个可能的ATOMIC值之一** - 它不是**控制流语句来处理代码执行.... –

+0

@marc_s - 我在想如何解释当前的错误,很好解释谢谢! –

回答

0

代替CASE声明使用AND/OR逻辑做你想要检索的所有记录这个

SELECT DISTINCT commodity, 
       commodity_id, 
       [description], 
       train, 
       truck 
FROM dbo.list_commodity 
WHERE (@Truck = 1 
     AND truck = @Truck) 
     OR (@Train = 1 
      AND train = @Train)  

如果当两个@Truck@Train不等于1然后添加以下条件以上查询

 OR (@Train <> 1 
      AND @Train <> 1)  
+0

抱歉延误去了午餐。是的,我认为我最初有类似的东西,但是当我采用一种解决方案时,每个人都使用Case语句 – Holmes

0

如果您期待THEN truck = @Truck w生病返回truefalse那么你错过了MS SQL没有布尔数据类型和布尔表达式的事实。

0

如果你仍然想使用CASE语句,下面的查询会有所帮助:

DECLARE @Truck INT = 1 -- 1 is an example 
DECLARE @Train INT = 1 -- 1 is an example 

SELECT DISTINCT 
     Commodity, 
     Commodity_ID, 
     [Description], 
     Train, 
     Truck 
FROM dbo.List_Commodity 
WHERE 1 = 
     (
      CASE 
       WHEN @Truck = 1 AND Truck = @Truck THEN 1 
       WHEN @Train = 1 AND Train = @Train THEN 1 
      END 
     ) 

P.S:请注意,CASE语句只返回应在此相比,它的值。