我要做的是对同一列使用多个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)

然而,我想做的是对同一列“qty”使用多个WHEN。

如下代码所示:

IF
// CODE
ELSE IF
// CODE
ELSE IF
// CODE
ELSE
// CODE

当前回答

case 
    when a.REASONID in ('02','03','04','05','06') then
        case b.CALSOC 
            when '1' then 'yes' 
            when '2' then 'no' 
            else 'no' 
        end
    else 'no' 
end 

其他回答

当有多种情况时,你可以使用下面的例子。

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
    case when first_condition
      then first_condition_result_true
    else
      case when second_condition 
        then second_condition_result_true
      else
          second_condition_result_false                              
      end
    end
  end as qty

case表达式有三种格式。你可以用很多WHEN as做CASE;

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

或者一个简单的CASE表达式

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

或个案中个案作为;

CASE  WHEN Col1 < 2 THEN  
                    CASE Col2 WHEN 'X' THEN 10 ELSE 11 END
      WHEN Col1 = 2 THEN 2
      ...
      ELSE 0 END as Qty

综合所有条件

select  a.* from tbl_Company a

where  a.Company_ID NOT IN (1,2)  

AND (   
        (0 = 
            CASE WHEN (@Fromdate = '' or @Todate='')
                THEN 0 
                ELSE 1  
            END
        )      -- if 0=0 true , if 0=1 fails (filter only when the fromdate and todate is present)
                OR
        (a.Created_Date between @Fromdate and @Todate )                 
    )

它只是你需要多个WHEN为一个单一的情况下表现得像if..Elseif其他. .

       CASE WHEN 1=1       --if
       THEN
        WHEN 1=1              --else if
         THEN ... 
        WHEN ...             --else if
        THEN 
        ELSE                      --else
       ......
         END