복붙노트

[SQL] 2008 SQL 서버를 사용하는 경우 조건이 어떻게 여러 CASE해야합니까?

SQL

2008 SQL 서버를 사용하는 경우 조건이 어떻게 여러 CASE해야합니까?

난 할 노력하고있어하는 하나 이상의 CASE 사용되면 같은 열의 조건.

다음은 쿼리에 대한 내 코드는 다음과 같습니다

   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)

그러나, 내가하고 싶은 두 개 이상의 동일한 열 "수량"의 ​​사용이다.

다음 코드에서와 같이 :

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

해결법

  1. ==============================

    1.경우 표현의 두 가지 형식이있다. 당신은 언제 많은과 CASE를 할 수 있습니다

    경우 표현의 두 가지 형식이있다. 당신은 언제 많은과 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 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
    
  2. ==============================

    2.그냥 당신은 그들이 수업 때 더 사용해야합니다,이 하나를 사용하십시오.

    그냥 당신은 그들이 수업 때 더 사용해야합니다,이 하나를 사용하십시오.

    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)
    
  3. ==============================

    3.당신은 때 여러 조건으로 사건의 예를 아래에 사용할 수 있습니다.

    당신은 때 여러 조건으로 사건의 예를 아래에 사용할 수 있습니다.

    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
    
  4. ==============================

    4.이것은 하나의 문에 다른 테스트를 수행하는 효과적인 방법이 될 수있다

    이것은 하나의 문에 다른 테스트를 수행하는 효과적인 방법이 될 수있다

    select
    case colour_txt 
      when 'red' then 5 
      when 'green' then 4 
      when 'orange' then 3
    else 0 
    end as Pass_Flag
    

    이것은 단지 평등 비교에서 작동합니다!

  5. ==============================

    5.

        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
    
  6. ==============================

    6.

    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 
    
  7. ==============================

    7.나는 비슷한했다하지만 날짜를 처리했다. 지난 달에 대한 모든 항목을 표시하는 쿼리 월까지 조건없이 좋은 작품 순서대로 올바르게, 년월 변수를 추가하는 데 필요한 작업을위한

    나는 비슷한했다하지만 날짜를 처리했다. 지난 달에 대한 모든 항목을 표시하는 쿼리 월까지 조건없이 좋은 작품 순서대로 올바르게, 년월 변수를 추가하는 데 필요한 작업을위한

    declare @yr int
    declare @mth int
    
    set @yr=(select case when month(getdate())=1 then YEAR(getdate())-1 else YEAR(getdate())end)
    set @mth=(select case when month(getdate())=1 then month(getdate())+11 else month(getdate())end)
    

    지금은 단지 조건에 변수를 추가 : ...

    (year(CreationTime)=@yr and MONTH(creationtime)=@mth)
    
  8. ==============================

    8.모든 조건을 결합

    모든 조건을 결합

    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 )                 
        )
    
  9. ==============================

    9.이런 식으로 뭔가, 두 조건 두 열

    이런 식으로 뭔가, 두 조건 두 열

    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
    
  10. ==============================

    10.그 하나의 경우에 다른 .. 경우 ELSEIF처럼 행동 할 때 여러 필요 그냥 ..

    그 하나의 경우에 다른 .. 경우 ELSEIF처럼 행동 할 때 여러 필요 그냥 ..

       Case when 1=1       //if
       Then
        When 1=1              //else if
         Then.... 
        When .....              //else if
        Then 
        Else                      //else
       ....... 
         End
    
  11. from https://stackoverflow.com/questions/14630984/how-do-i-do-multiple-case-when-conditions-using-sql-server-2008 by cc-by-sa and MIT license