如何在SQL SELECT中执行CASE语句?

如何在SQL SELECT中执行CASE语句?,sql,sql-server,tsql,case,Sql,Sql Server,Tsql,Case,如何在SQL SELECT语句中执行IF…THEN?是否可以更改为Case..THEN为IF..THEN,在Case..THEN中有一些错误 DECLARE @Display Varchar(10) SET @Display = '210120' DECLARE @ret Varchar(5) SET @ret = '12345' DECLARE @ret2 Varchar(5) SET @ret2 = '6789' DECLARE @Cus

如何在SQL SELECT语句中执行
IF…THEN
?是否可以更改为
Case..THEN
为IF..THEN,在
Case..THEN中有一些错误

DECLARE  @Display Varchar(10)   SET @Display = '210120'
DECLARE  @ret     Varchar(5)    SET @ret     = '12345'
DECLARE  @ret2    Varchar(5)    SET @ret2    = '6789'

DECLARE  @Custom2 Varchar(10)
SELECT (CASE 
          WHEN CHARINDEX(LEFT(@Display, 1),@ret) > 0 THEN
              SET @Custom2 = 'None'
          WHEN CHARINDEX(LEFT(@Display, 1),@ret2) > 0 THEN
              SET @Custom2 = @ret+'_'+@Display 
       END ) as Custom

提前谢谢

您的语法有点不正确,请尝试以下方法:

SELECT @Custom2 = CASE WHEN CHARINDEX(LEFT(@Display, 1),@ret) > 0 
                       THEN 'None'
                  WHEN CHARINDEX(LEFT(@Display, 1),@ret2) > 0 
                       THEN @ret + '_' + @Display 
                  END As Custom

这里发生的事情不匹配。您不能像现在这样使用case表达式来控制流……但您也可以将其作为一个列。现在还不完全清楚你想在这里做什么,但也许这会有所帮助

DECLARE  @Display Varchar(10)   SET @Display = '210120'
DECLARE  @ret     Varchar(5)    SET @ret     = '12345'
DECLARE  @ret2    Varchar(5)    SET @ret2    = '6789'

SELECT CASE WHEN CHARINDEX(LEFT(@Display, 1),@ret) > 0 THEN
              'None'
          WHEN CHARINDEX(LEFT(@Display, 1),@ret2) > 0 THEN
              @ret+'_'+@Display 
       END as Custom

不要试图在选择查询的中间设置变量。<代码> CASE 是一个表达式(如“代码> A+B < /代码>”),它返回单个原子值,它不是一个流控制语句,它可以处理代码块和类似的东西。提示:“代码>外壳< /COD>表达式还可以有一个<代码> ELECT/<代码>子句来处理任何意外的数据。