¿Cómo hago múltiples condiciones CASE WHEN usando SQL Server 2008?

Resuelto Nils Anders asked hace 11 años • 11 respuestas

Lo que intento hacer es usar más de una condición CASE WHEN para la misma columna.

Aquí está mi código para la consulta:

   SELECT   Url='',
            p.ArtNo,
            p.[Description],
            p.Specification,
            CASE 
            WHEN 1 = 1 or 1 = 1 
               THEN 1 
               ELSE 0 
            END as Qty,
            p.NetPrice,
            [Status] = 0
      FROM  Product p (NOLOCK)

Sin embargo, lo que quiero hacer es usar más de un CUANDO para la misma columna "cantidad".

Como en el siguiente código:

IF
// CODE
ELSE IF
// CODE
ELSE IF
// CODE
ELSE
// CODE
Nils Anders avatar Jan 31 '13 23:01 Nils Anders
Aceptado

Hay tres formatos de expresión de casos . Puedes hacerlo CASEcon muchos WHENcomo;

CASE  WHEN Col1 = 1 OR Col3 = 1  THEN 1 
      WHEN Col1 = 2 THEN 2
      ...
      ELSE 0 END as Qty

OCASE una expresión simple

CASE Col1 WHEN 1 THEN 11 WHEN 2 THEN 21 ELSE 13 END

O CASE dentro CASE como;

CASE  WHEN Col1 < 2 THEN  
                    CASE Col2 WHEN 'X' THEN 10 ELSE 11 END
      WHEN Col1 = 2 THEN 2
      ...
      ELSE 0 END as Qty
Kaf avatar Jan 31 '2013 16:01 Kaf

Solo usa este, tienes que usar más cuando sean clases.

SELECT   Url='',
         p.ArtNo,
         p.[Description],
         p.Specification,
         CASE 
         WHEN 1 = 1 or 1 = 1 
            THEN 1 
         WHEN 2 = 2
             THEN 2
         WHEN 3 = 3
              THEN 3
          ELSE 0 
        END as Qty,
        p.NetPrice,
        [Status] = 0
  FROM  Product p (NOLOCK)
Shankar avatar Jan 31 '2013 16:01 Shankar

Puede utilizar el siguiente ejemplo de caso con múltiples condiciones.

SELECT
  id,stud_name,
  CASE
    WHEN marks <= 40 THEN 'Bad'
    WHEN (marks >= 40 AND
      marks <= 100) THEN 'good'
    ELSE 'best'
  END AS Grade
FROM Result
Abhijeet Navgire avatar Mar 23 '2018 12:03 Abhijeet Navgire

Algo como esto, dos condiciones, dos columnas

SELECT ITEMSREQ.ITEM AS ITEM,
       ITEMSREQ.CANTIDAD AS CANTIDAD,
       (CASE  WHEN ITEMSREQ.ITEMAPROBADO=1 THEN 'APROBADO'
              WHEN ITEMSREQ.ITEMAPROBADO=0 THEN 'NO APROBADO'
        END) AS ITEMS,
        (CASE 
              WHEN ITEMSREQ.ITEMAPROBADO = 0 
              THEN CASE WHEN REQUISICIONES.RECIBIDA IS NULL  THEN 'ITEM NO APROBADO PARA ENTREGA' END
              WHEN ITEMSREQ.ITEMAPROBADO = 1 
              THEN CASE WHEN REQUISICIONES.RECIBIDA IS NULL THEN 'ITEM AUN NO RECIBIDO' 
                        WHEN REQUISICIONES.RECIBIDA=1 THEN 'RECIBIDO' 
                        WHEN REQUISICIONES.RECIBIDA=0 THEN 'NO RECIBIDO' 
                       END
              END)
              AS RECIBIDA
 FROM ITEMSREQ
      INNER JOIN REQUISICIONES ON
      ITEMSREQ.CNSREQ = REQUISICIONES.CNSREQ
Ricardo Roa avatar Jan 10 '2020 23:01 Ricardo Roa