你能在 Case 语句中做一个 sub select
Can you do a sub select within a Case statement
可能是一些非常微不足道的事情,但我还没有完全找到我在互联网上寻找的答案,而且我遇到了语法错误。我 want/need 要做的是在我的 where 子句中提供一个特殊情况,其中文档类型为 1。如果是,那么它需要匹配来自临时 [=19] 的子 select 的 claimID =].如果文档类型不是 1 那么我们只需要继续并忽略 select.
AND
CASE
WHEN @DocType = 1 THEN (c.ClaimID IN (SELECT TNE.ClaimID FROM TNE)
END
我看过一些 for if 语句,但我似乎没有让它起作用,而且到目前为止还没有在网上找到任何显示 case 语句执行我想要的操作的内容。这甚至可能吗?
你不需要 case 语句,你可以这样做:
AND (@DocType <> 1 or c.ClaimID in (SELECT TNE.ClaimID FROM TNE))
一种 CASE
expression (not statement) returns a single value. SQL Server supports the bit data type. (Valid values are 0, 1, 'TRUE' and 'FALSE'.) There is a boolean 数据类型(值为 TRUE、FALSE 和 UNKNOWN),但您无法牢牢掌握其中一种。您的 CASE
表达式尝试 return 一个布尔值,给出或采用不匹配的括号,在此上下文中不受支持。
你可以使用类似这样的东西,尽管 Luc 的回答更适用于所述问题:
and
case
when @DocType = 1 and c.ClaimId in ( select TNE.ClaimId from TNE ) then 1
when @DocType = 2 and ... then 1
...
else 0
end = 1
请注意,CASE
return 是一个您必须随后比较的值 (= 1
)。
可能是一些非常微不足道的事情,但我还没有完全找到我在互联网上寻找的答案,而且我遇到了语法错误。我 want/need 要做的是在我的 where 子句中提供一个特殊情况,其中文档类型为 1。如果是,那么它需要匹配来自临时 [=19] 的子 select 的 claimID =].如果文档类型不是 1 那么我们只需要继续并忽略 select.
AND
CASE
WHEN @DocType = 1 THEN (c.ClaimID IN (SELECT TNE.ClaimID FROM TNE)
END
我看过一些 for if 语句,但我似乎没有让它起作用,而且到目前为止还没有在网上找到任何显示 case 语句执行我想要的操作的内容。这甚至可能吗?
你不需要 case 语句,你可以这样做:
AND (@DocType <> 1 or c.ClaimID in (SELECT TNE.ClaimID FROM TNE))
一种 CASE
expression (not statement) returns a single value. SQL Server supports the bit data type. (Valid values are 0, 1, 'TRUE' and 'FALSE'.) There is a boolean 数据类型(值为 TRUE、FALSE 和 UNKNOWN),但您无法牢牢掌握其中一种。您的 CASE
表达式尝试 return 一个布尔值,给出或采用不匹配的括号,在此上下文中不受支持。
你可以使用类似这样的东西,尽管 Luc 的回答更适用于所述问题:
and
case
when @DocType = 1 and c.ClaimId in ( select TNE.ClaimId from TNE ) then 1
when @DocType = 2 and ... then 1
...
else 0
end = 1
请注意,CASE
return 是一个您必须随后比较的值 (= 1
)。