Tsql SQL服务器:in…case…in WHERE子句

Tsql SQL服务器:in…case…in WHERE子句,tsql,select,case,where,Tsql,Select,Case,Where,我需要为如下内容编写查询代码: Select [something] Where condition in case when (if another_condition = A and 3rd Condition = B) then (C,D) when (if another_condition = N and 3rd Condition = E) then (F,G) else (J,K) end 基本上,我想要的是,如果满足A和B,条件可以设置为C或D,如果满足N或E,则条件可以设置为

我需要为如下内容编写查询代码:

Select [something]
Where
condition in
case
when (if another_condition = A and 3rd Condition = B) then (C,D)
when (if another_condition = N and 3rd Condition = E) then (F,G)
else (J,K)
end
基本上,我想要的是,如果满足A和B,条件可以设置为C或D,如果满足N或E,则条件可以设置为F或G,否则条件设置为J或K。 然而,当我运行这个时,我不断地 关键字“Case”附近的语法不正确


请帮忙!谢谢

这如何-UNION子查询将在子查询中为您提供完整的结果集。然后您可以说“WHERE条件IN”(子查询)。像这样:

SELECT [something]
WHERE
condition IN
(SELECT CASE WHEN (another_condition = A AND 3rd Condition = B) THEN C
   WHEN (another_condition = N AND 3rd Condition = E) THEN F
   ELSE J
   END AS Value

UNION

SELECT CASE WHEN (another_condition = A AND 3rd Condition = B) THEN D
   WHEN (another_condition = N AND 3rd Condition = E) THEN G
   ELSE K
   END AS Value
)

这样如何-UNION子查询将为您提供子查询中的完整结果集。然后您可以说“WHERE条件IN”(子查询)。像这样:

SELECT [something]
WHERE
condition IN
(SELECT CASE WHEN (another_condition = A AND 3rd Condition = B) THEN C
   WHEN (another_condition = N AND 3rd Condition = E) THEN F
   ELSE J
   END AS Value

UNION

SELECT CASE WHEN (another_condition = A AND 3rd Condition = B) THEN D
   WHEN (another_condition = N AND 3rd Condition = E) THEN G
   ELSE K
   END AS Value
)
也许是这样:

Where  (Another_Condition = 'A' And Third_Condition = 'B' And Condition in ('C','D'))
       Or 
       (Another_Condition = 'N' and Third_Condition = 'E' And Condition in ('F','G'))
       Or 
       Condition In ('J','K')
在where子句中混合and和or时要非常小心。括号很重要。

可能是:

Where  (Another_Condition = 'A' And Third_Condition = 'B' And Condition in ('C','D'))
       Or 
       (Another_Condition = 'N' and Third_Condition = 'E' And Condition in ('F','G'))
       Or 
       Condition In ('J','K')

在where子句中混合and和or时要非常小心。括号很重要。

我可能会赞同G Mastro将查询扩展为布尔表达式的方法。虽然嵌套查询方法可以工作,但代码的意图不太明显


已经说过,如果在你的case语句中有很多情况,你可能想考虑修改你的数据,因为不管你如何写查询,它都归结为一个大布尔表达式。

< P>我可能会用G Mastro扩展查询的方法作为布尔表达式。虽然嵌套查询方法可以工作,但代码的意图不太明显


已经说过,如果在你的case语句中有很多情况,你可能想考虑修改你的数据,因为不管你如何写查询,它都归结为一个大布尔表达式。< /P>你在case语句中设置“C或D”是什么意思?同一个CASE条件不能满足2个不同的结果。若要避免CASE错误,请将CASE语句放在括号中。在CASE语句中“设置为C或D”是什么意思?在满足相同的案例条件时,不能有两个不同的结果。要避免案例错误,请将案例语句放在括号中。我也打算建议这样做。但我认为您的final OR子句是错误的,因为它将为每一行测试('J','K')中的条件,这与CASE不同。。。ELSE,它将只测试与前两个子句不匹配的行。最后一行应该是:NOT((另一个_条件='A'和第三个_条件='B')或(另一个_条件='N'和第三个_条件='E'))和条件IN('J','K'),我也打算提出这个建议。但我认为您的final OR子句是错误的,因为它将为每一行测试('J','K')中的条件,这与CASE不同。。。ELSE,它将只测试与前两个子句不匹配的行。最后一行应该是:NOT((另一个_条件='A'和第三个_条件='B')或(另一个_条件='N'和第三个_条件='E'))和条件IN('J','K')感谢大家的回答,我使用了G Mastro的方法,效果非常好!谢谢非常感谢大家的回答,我使用了G马斯特罗的方法,效果非常好!谢谢