SQL新手,我刚刚创建了一个带有assitance的SQL查询:
SELECT CASE
WHEN exists (SELECT CLIENT_CODE FROM STG_DM_CLIENT
WHERE CLIENT_CODE
NOT IN (SELECT CLIENT_CODE FROM DM_CLIENT)) THEN 'A'
else
WHEN exists (SELECT STG.CLIENT_CODE AS TRAN_TYPE
FROM STG_DM_CLIENT STG
JOIN DM_CLIENT SRC
ON SRC.CLIENT_CODE = STG.CLIENT_CODE
WHERE (SRC.CLIENT_NAME <> STG.CLIENT_NAME)) THEN 'C'
END
FROM DM_CLIENT, STG_DM_CLIENT
无法提供正确的结果集,在
旁边显示incorect语法第15行,第1行,第8行 关键字“WHEN”附近的语法不正确。
关于我做错了什么的想法
答案 0 :(得分:2)
您只想在END处有一个ELSE
语句。正确的格式如下:
CASE WHEN <condition 1> THEN <output 1>
WHEN <condition 2> THEN <output 2>
-- Optional, if left out assumes NULL for unhandled conditions
[ELSE <output 3> ]
END
当您在第一个条件之后放置ELSE
时,引擎需要最终输出,而不是另一个条件。
答案 1 :(得分:1)
让我格式化您的示例(不进行修改),以便结构可见:
SELECT CASE WHEN exists (SELECT CLIENT_CODE FROM STG_DM_CLIENT
WHERE CLIENT_CODE NOT IN (SELECT CLIENT_CODE FROM DM_CLIENT))
THEN 'A'
else WHEN exists (SELECT STG.CLIENT_CODE AS TRAN_TYPE
FROM STG_DM_CLIENT STG
JOIN DM_CLIENT SRC
ON SRC.CLIENT_CODE = STG.CLIENT_CODE
WHERE (SRC.CLIENT_NAME <> STG.CLIENT_NAME))
THEN 'C'
END
FROM DM_CLIENT, STG_DM_CLIENT
所以你的结构是:
CASE WHEN ... THEN ...
ELSE WHEN ... THEN ...
END
这不正确。您可以将其更改为两个嵌套的case语句(完成CASE和END):
CASE WHEN ... THEN ...
ELSE CASE WHEN ... THEN ...
END
END
或(更好):
CASE WHEN ... THEN ...
WHEN ... THEN ...
[ELSE ...]
END
所以,从原始陈述中删除else
,你应该没事。
答案 2 :(得分:0)
目前尚不清楚你的追求是什么,这是最接近的有效陈述;
SELECT
CASE WHEN EXISTS (...)
THEN 'A'
ELSE
CASE WHEN EXISTS (...)
THEN 'C'
ELSE 'Neither exists()'
END
END
当第一个存在匹配时,你将获得A
当第一个不存在时,如果第二个匹配