【发布时间】:2021-01-11 20:16:13
【问题描述】:
在 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。原因 。 . . . . : 在标记处检测到语法错误。令牌不是有效令牌。有效标记的部分列表是 = != >= ¬ ¬= IN。此列表假定该语句在令牌之前是正确的。错误可能出现在语句的前面,但语句的语法在此之前似乎是有效的。恢复 。 . . :执行以下一项或多项操作并再次尝试请求: -- 验证令牌区域中的 SQL 语句。更正陈述。错误可能是缺少逗号或引号,可能是拼写错误的单词,也可能与从句的顺序有关。 -- 如果错误标记是 ,请更正 SQL 语句,因为它没有以有效的子句结尾。
【问题讨论】:
-
此类问题可能取决于所使用的技术。您使用的是哪个数据库?如果功能支持,您可能还考虑将案例块移动到功能。
-
请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你期望的内容和原因。