在T-SQL WHERE子句

时间:2015-07-22 23:31:53

标签: sql tsql

我有一个现有的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代码是相同的,但我只是想让它在当前运行。我所做的只是添加CASEELSE,并复制已完成的内容,但现在我收到错误说明

  

关键字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。我尝试过相同的结果,但我更新了代码以显示我是如何组织它的。

3 个答案:

答案 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。您只能在存储过程中使用它。

使用CASEIIF代替

答案 2 :(得分:0)

当你启动IN查询时,你用if开始它 - 你不应该用CASE语句启动吗?情况那么结束了吗?