如何使用SQL Server 2008执行多个CASE WHEN条件?

Nil*_*ers 156 sql sql-server-2008

我想要做的是为同一列使用多个CASE WHEN条件.

这是我的查询代码:

   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)
Run Code Online (Sandbox Code Playgroud)

但是,我想要做的是对同一列"qty"使用多个WHEN.

如下面的代码所示:

IF
// CODE
ELSE IF
// CODE
ELSE IF
// CODE
ELSE
// CODE
Run Code Online (Sandbox Code Playgroud)

Kaf*_*Kaf 346

案例表达两种格式.你可以CASE和很多人WHEN一样;

CASE  WHEN Col1 = 1 OR Col3 = 1  THEN 1 
      WHEN Col1 = 2 THEN 2
      ...
      ELSE 0 END as Qty
Run Code Online (Sandbox Code Playgroud)

简单的CASE表达

CASE Col1 WHEN 1 THEN 11 WHEN 2 THEN 21 ELSE 13 END
Run Code Online (Sandbox Code Playgroud)

或者 CASE 在内 CASE ;

CASE  WHEN Col1 < 2 THEN  
                    CASE Col2 WHEN 'X' THEN 10 ELSE 11 END
      WHEN Col1 = 2 THEN 2
      ...
      ELSE 0 END as Qty
Run Code Online (Sandbox Code Playgroud)

  • 那里有两个.*列出三个*:D (18认同)
  • @ d8aninja他们只列出了2.第三个是前两个的组合,外壳是第一种类型,内壳是第二种类型. (2认同)

Sha*_*kar 12

只要使用这个,你必须在课堂上使用更多.

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)
Run Code Online (Sandbox Code Playgroud)


Abh*_*ire 5

当有多个条件时,您可以使用以下案例示例。

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
Run Code Online (Sandbox Code Playgroud)


小智 5

像这样,两个条件两列

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
Run Code Online (Sandbox Code Playgroud)