尝试在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
答案 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
将返回true
或false
,那么您将错过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
语句只返回一个值,应在此处进行比较。