我可以在 JOIN 条件下使用 CASE
Can I use CASE in JOIN condition
我在 JOIN 语句中使用 CASE 时出错。下面是查询。我已经屏蔽了内容。请让我知道我哪里出错了。因为它对我来说很好。也粘贴了错误。
SELECT
S1.NR AS "a",
S1.ZTV AS "b",
S1.RNR AS "c",
S1.TW AS "d",
S1.STV AS "e",
S1.RTV "f",
S1.DA AS "v",
CASE
WHEN S1.ZTV = '115' THEN 'T_RR'
ELSE ' '
END AS "DT",
' ' AS "SiT",
S1.S1JL AS "Ns",
S1.S1JM AS "Vs",
S1.S1JN AS "NSv",
S1.S1JO AS "VSf",
S1.S1JP AS "Vse",
S1.S1JQ AS "Vde",
S1.S1JR AS "Vds"
FROM
XXXX S1
JOIN
YYYYY B
ON S1.S1R1TW = B.BUKSCD
AND (
CASE
WHEN B1.BUSX != ' '
AND S1.S1TV = B1.BTX THEN 1
WHEN S1.S1TV = B1.B2TX THEN 1
ELSE 0
END
)
我收到以下错误
消息:[SQL0104] 令牌无效。有效标记:< > = <> <= !< !> != >= ¬< ¬> ¬= IN。原因 。 . . . . : 在 token 处检测到语法错误。令牌不是有效令牌。有效标记的部分列表是 < > = <> <= !< !> != >= ¬< ¬> ¬= IN。此列表假定语句在令牌之前是正确的。错误可能出现在语句的前面,但语句的语法到目前为止似乎是有效的。恢复 。 . . :执行以下一项或多项操作,然后重试请求: - 验证令牌区域中的 SQL 语句。更正声明。错误可能是缺少逗号或引号,可能是单词拼写错误,也可能与从句的顺序有关。 -- 如果错误标记是 ,请更正 SQL 语句,因为它没有以有效子句结尾。
这是无效的SQL:
CASE WHEN B1.BUSX != ' ' AND S1.S1TV = B1.BTX THEN 1
WHEN S1.S1TV = B1.B2TX THEN 1
ELSE 0
(虽然有些数据库确实支持)。相反,使用 OR
:
( (B1.BUSX <> ' ' AND S1.S1TV = B1.BTX) OR
(B1.BUSX = ' ')
)
我应该指出你可以使用CASE
,但之后你需要一些比较:
(CASE WHEN B1.BUSX != ' ' AND S1.S1TV = B1.BTX THEN 1
WHEN S1.S1TV = B1.B2TX THEN 1
ELSE 0) = 1
不过,我觉得基本的布尔运算更简单。
我在 JOIN 语句中使用 CASE 时出错。下面是查询。我已经屏蔽了内容。请让我知道我哪里出错了。因为它对我来说很好。也粘贴了错误。
SELECT
S1.NR AS "a",
S1.ZTV AS "b",
S1.RNR AS "c",
S1.TW AS "d",
S1.STV AS "e",
S1.RTV "f",
S1.DA AS "v",
CASE
WHEN S1.ZTV = '115' THEN 'T_RR'
ELSE ' '
END AS "DT",
' ' AS "SiT",
S1.S1JL AS "Ns",
S1.S1JM AS "Vs",
S1.S1JN AS "NSv",
S1.S1JO AS "VSf",
S1.S1JP AS "Vse",
S1.S1JQ AS "Vde",
S1.S1JR AS "Vds"
FROM
XXXX S1
JOIN
YYYYY B
ON S1.S1R1TW = B.BUKSCD
AND (
CASE
WHEN B1.BUSX != ' '
AND S1.S1TV = B1.BTX THEN 1
WHEN S1.S1TV = B1.B2TX THEN 1
ELSE 0
END
)
我收到以下错误 消息:[SQL0104] 令牌无效。有效标记:< > = <> <= !< !> != >= ¬< ¬> ¬= IN。原因 。 . . . . : 在 token 处检测到语法错误。令牌不是有效令牌。有效标记的部分列表是 < > = <> <= !< !> != >= ¬< ¬> ¬= IN。此列表假定语句在令牌之前是正确的。错误可能出现在语句的前面,但语句的语法到目前为止似乎是有效的。恢复 。 . . :执行以下一项或多项操作,然后重试请求: - 验证令牌区域中的 SQL 语句。更正声明。错误可能是缺少逗号或引号,可能是单词拼写错误,也可能与从句的顺序有关。 -- 如果错误标记是 ,请更正 SQL 语句,因为它没有以有效子句结尾。
这是无效的SQL:
CASE WHEN B1.BUSX != ' ' AND S1.S1TV = B1.BTX THEN 1
WHEN S1.S1TV = B1.B2TX THEN 1
ELSE 0
(虽然有些数据库确实支持)。相反,使用 OR
:
( (B1.BUSX <> ' ' AND S1.S1TV = B1.BTX) OR
(B1.BUSX = ' ')
)
我应该指出你可以使用CASE
,但之后你需要一些比较:
(CASE WHEN B1.BUSX != ' ' AND S1.S1TV = B1.BTX THEN 1
WHEN S1.S1TV = B1.B2TX THEN 1
ELSE 0) = 1
不过,我觉得基本的布尔运算更简单。