Pregunta

    DECLARE @TestVal int
SET @TestVal = 5

SELECT
    CASE
        WHEN @TestVal <=3 THEN 'Top 3'
        ELSE 'Other'
    END

vi este código de ejemplo en línea, pero no pude encontrar un ejemplo en el que no había expresión y tenía más de uno cuando, por lo que estoy preguntando si este tipo de cosas está bien:

    DECLARE @TestVal int
SET @TestVal = 5

SELECT
    CASE
        WHEN @TestVal <=3 THEN 'Top 3'
                WHEN (select ...) = 1 THEN 'Other Value'
                WHEN (select ...) = 2 THEN 'Other Value 2'
        ELSE 'Other'
    END

¿O tengo que decir CASO CUANDO para cada línea?

¿Fue útil?

Solución

Caso toma la siguiente forma

CASE WHEN Condition THEN Result
     WHEN Condition2 THEN Result2
ELSE Default
END

Editar

Esto asume sus utilizando Microsoft SQL Server otros DBMS puede ser diferente

Otros consejos

Sí, está bien, pero me gustaría alinear el "cuándo" S verticalmente y explicarlo más a esto:

SELECT
    CASE
        WHEN @TestVal <=3  THEN 'Top 3'
        WHEN @TestVal <=10 THEN 'Top 10'
        WHEN @TestVAl <=25 THEN 'Top 25'
        ELSE 'Other'
    END

El formato podría ser un fallo de rebajas, pero la (select...) en su ejemplo complicado lo que debe ser un fragmento simple.

    SELECT
       CASE
          WHEN @TestVal <=3  THEN 'Top 3'
          WHEN @TestVal <=10 THEN 'Top 10'
          WHEN @TestVAl <=25 THEN 'Top 25'
          ELSE 'Other'
       END

En lo que respecta a los estados de casos de anidación esto se puede hacer también (hasta 10 declaraciones anidado de casos permitidos dentro de sql)

http://msdn.microsoft.com/en-us/library/ ms181765.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top