[sql] 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 


답변

나는 비슷했지만 날짜를 다루고있었습니다. 지난 달의 모든 항목을 표시하는 쿼리로, 1 월까지 조건없이 작동합니다. 제대로 작동하려면 연도 및 월 변수를 추가해야합니다.

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)