我有一个现有的T-SQL查询,它返回需要发送更新的客户列表。作为WHERE子句的一部分,查询将检查以确保版本符合长度6,然后附加其他字符。
我们的最新版本有更长的版本,所以我需要在SQL中添加一个条件语句,但是当我这样做时我一直都会收到错误。为简洁起见,我不会发布整个声明。当我像这样运行它时,SQL语句返回值。
(SELECT
MAX(substring(cversion, 1, 4) + case when len(cversion) = 6 then '0' else '' end + substring(cversion,5,3))
FROM version
GROUP BY iproductid, LEFT(cversion, 3)))
以下是我的修改。我知道else代码是相同的,但我只是想让它在当前运行。我所做的只是添加CASE
和ELSE
,并复制已完成的内容,但现在我收到错误说明
关键字SELECT
附近的语法不正确
以及添加的关键字附近的两个类似错误。
vr.cversion IN
(
CASE WHEN product.iproductid < 8 THEN
SELECT MAX
(
substring(cversion,1,4) +
case when len(cversion) = 6
then '0'
else ''
end + substring(cversion,5,3)
)
FROM version
GROUP BY iproductid,LEFT(cversion, 3)
ELSE
SELECT MAX
(
substring(cversion,1,4) +
case when len(cversion) = 6
then '0'
else ''
end + substring(cversion,5,3)
)
FROM version
GROUP BY iproductid,LEFT(cversion, 3)
END
)
有谁能告诉我我做错了什么?感谢。
更新
有些人说我需要使用CASE。我尝试过相同的结果,但我更新了代码以显示我是如何组织它的。
答案 0 :(得分:1)
您需要围绕select语句使用括号,以便将它们解析为子查询。我注意到这两个代码块是相同的,但我想它们的意思不一样?
vr.cversion IN
(
CASE WHEN product.iproductid < 8 THEN
(
SELECT MAX
(
substring(cversion,1,4) +
case when len(cversion) = 6
then '0'
else ''
end + substring(cversion,5,3)
)
FROM version
GROUP BY iproductid,LEFT(cversion, 3)
)
ELSE
(
SELECT MAX
(
substring(cversion,1,4) +
case when len(cversion) = 6
then '0'
else ''
end + substring(cversion,5,3)
)
FROM version
GROUP BY iproductid,LEFT(cversion, 3)
)
END
)
答案 1 :(得分:0)
您不能在TSQL语句中使用IF
。您只能在存储过程中使用它。
使用CASE
或IIF
代替
答案 2 :(得分:0)
当你启动IN查询时,你用if开始它 - 你不应该用CASE语句启动吗?情况那么结束了吗?