CASE-WHERE中的陈述条款不起作用我错过了什么?

时间:2016-05-16 17:01:20

标签: sql 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

3 个答案:

答案 0 :(得分: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)     

答案 1 :(得分:0)

如果您期望THEN truck = @Truck将返回truefalse,那么您将错过MS SQL没有布尔数据类型且没有布尔表达式的事实。

答案 2 :(得分: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语句只返回一个值,应在此处进行比较。