development

SQL Server 2008을 사용하여 여러 CASE WHEN 조건을 어떻게 수행합니까?

big-blog 2020. 6. 9. 07:46
반응형

SQL Server 2008을 사용하여 여러 CASE WHEN 조건을 어떻게 수행합니까?


내가하려고하는 것은 동일한 열에 대해 둘 이상의 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 expression의 두 가지 형식 이 있습니다 . 당신은 CASE많은 WHEN것으로 할 수 있습니다 ;

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

이것을 사용하십시오. 수업 일 때 더 많이 사용해야합니다.

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)

여러 조건이있는 경우 아래 예를 사용할 수 있습니다.

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

이것은 하나의 문장에서 다른 테스트를 수행하는 효율적인 방법 일 수 있습니다

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

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


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

I had a similar but it was dealing with dates. Query to show all items for the last month, works great without conditions until Jan. In order for it work correctly, needed to add a year and month variable

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)

Now I just add the variable into condition: ...

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

Combining all conditions

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 )                 
    )

참고URL : https://stackoverflow.com/questions/14630984/how-do-i-do-multiple-case-when-conditions-using-sql-server-2008

반응형