简体   繁体   English

在SQL过程中的情况

[英]Case When in SQL procedure

I'm trying to use a case when in a sql procedure. 我正在尝试在sql过程中使用一种情况。

What i want is that when the variable @ID_ETAPA is 6 the where is a little diferent. 我想要的是,当变量@ID_ETAPA为6时,哪里有点不同。 But i'm getting multiple erros. 但是我得到了多个错误。 Incorrect syntax near = And Incorrect syntax near ELSE Someone knows what i'm missing? =附近的语法不正确以及ELSE附近的语法不正确有人知道我缺少什么吗?

WHERE CASE 
      WHEN @ID_ETAPA=6 THEN 
        SS.ID_STATUSSOLICITACAO = 1 -- PENDENTES
            AND SS.Id_etapa = @ID_ETAPA 
        Else
            SS.ID_STATUSSOLICITACAO = 1 -- PENDENTES
   END

THE full select with error in the where clause. 在where子句中有错误的完全选择。

SELECT DISTINCT CF.NOM_FILIAL,
        SS.COD_SOLICITACAO,
        SS.COD_GTV,
        SS.SEQ_GTV,
        SS.COD_SERIEGTV,
        ST.DES_TPSERVICO,
        SSI.DES_SISTEMAANALISE,
        SSI.ID_SISTEMAANALISE,
        SM.DES_MOTIVOSOLICITACAO,
        SE.DES_ETAPA,
        SS.ID_ETAPA,
        SST.DES_STATUSSOLICITACAO,
        CFSOLICITANTE.NOM_FUNC      AS NOM_SOLICITANTE,
        CFSUCESSOR.NOM_FUNC     AS NOM_SUCESSOR,
        CFOPERADOR.NOM_FUNC     AS NOM_OPERADOR,
        SS.DES_DETALHAMENTOGTV,
        SA.ID_GRUPOACESSO

INTO #DADOS

FROM SSE_SOLICITACAO SS

INNER JOIN COR_FILIAL CF
ON  CF.COD_REGIONAL     = SS.COD_REGIONAL
    AND CF.COD_FILIAL   = SS.COD_FILIAL

INNER JOIN SSE_TPSERVICO ST
ON  ST.ID_TPSERVICO = SS.ID_TPSERVICO

INNER JOIN SSE_SISTEMAANALISE SSI
ON  SSI.ID_SISTEMAANALISE = SS.ID_SISTEMAANALISE

INNER JOIN SSE_MOTIVOSOLICITACAO SM
ON  SM.ID_MOTIVOSOLICITACAO = SS.ID_MOTIVOSOLICITACAO

INNER JOIN SSE_ETAPA SE
ON  SE.ID_ETAPA = SS.ID_ETAPA

INNER JOIN SSE_STATUSSOLICITACAO SST
ON  SST.ID_STATUSSOLICITACAO = SS.ID_STATUSSOLICITACAO

INNER JOIN COR_FUNCIONARIO CFSOLICITANTE
ON  CFSOLICITANTE.COD_FUNC = SS.COD_FUNCSOLICITANTE

INNER JOIN SSE_ACESSO SA
ON  SA.COD_FUNCSOLICITANTE = SS.COD_FUNCSOLICITANTE

LEFT JOIN COR_FUNCIONARIO CFSUCESSOR
ON  CFSUCESSOR.COD_FUNC = SS.COD_FUNCSUCESSOR

LEFT JOIN COR_FUNCIONARIO CFOPERADOR
ON  CFOPERADOR.COD_FUNC = SS.COD_FUNCOPERADOR

WHERE SS.ID_STATUSSOLICITACAO = CASE 
      WHEN @ID_ETAPA=6 THEN 
        SS.ID_STATUSSOLICITACAO = 1 -- PENDENTES
            AND SS.Id_etapa = @ID_ETAPA 
        Else
            SS.ID_STATUSSOLICITACAO = 1 -- PENDENTES
   END

ORDER BY SS.COD_SOLICITACAO

The CASE statement must be part of the WHERE statement. CASE语句必须是WHERE语句的一部分。 Try: 尝试:

WHERE SS.ID_STATUSSOLICITACAO = CASE 
      WHEN @ID_ETAPA=6 THEN 
        SS.ID_STATUSSOLICITACAO = 1 -- PENDENTES
            AND SS.Id_etapa = @ID_ETAPA 
        Else
            SS.ID_STATUSSOLICITACAO = 1 -- PENDENTES
   END

See this post for more information: "CASE" statement within "WHERE" clause in SQL Server 2008 有关更多信息,请参见此帖子: SQL Server 2008中“ WHERE”子句中的“ CASE”语句

EDIT 编辑

Try taking SS.ID_STATUSSOLICITACAO = 1 out of the CASE expression and placing it afterwards: 尝试从CASE表达式中取出SS.ID_STATUSSOLICITACAO = 1并将其放置在SS.ID_STATUSSOLICITACAO = 1

WHERE SS.Id_etapa = 
    CASE WHEN @ID_ETAPA=6 THEN @ID_ETAPA 
        ELSE 0 --- What you use for this value depends on what other values are possible for the @ID_ETAPA variable of course
    END
AND SS.ID_STATUSSOLICITACAO = 1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM