Hoe voer ik meerdere CASE WHEN-voorwaarden uit met SQL Server 2008?

Ik probeer meer dan één CASE WHEN-voorwaarde voor dezelfde kolom te gebruiken.

Hier is mijn code voor de zoekopdracht:

  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)

Ik wil echter meer dan één WANNEER gebruiken voor dezelfde kolom “aantal”.

Zoals in de volgende code:

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

Antwoord 1, autoriteit 100%

Er zijn twee formaten van hoofdletters uitdrukking. Je kunt CASEdoen met veel Whenas;

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

Ofeen eenvoudige CASE-uitdrukking

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

OfCASEbinnenCASEals;

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

Antwoord 2, autoriteit 3%

Gebruik gewoon deze, je moet meer gebruiken als het lessen zijn.

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)

Antwoord 3

U kunt onderstaand voorbeeld van geval gebruiken met meerdere voorwaarden.

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

Antwoord 4

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 

Antwoord 5

Dit kan een efficiënte manier zijn om verschillende tests op een enkele verklaring uit te voeren

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

dit werkt alleen bij vergelijkingen van gelijkheid!


Antwoord 6

   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

Antwoord 7

zoiets, twee condities twee kolommen

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

Antwoord 8

Ik had een soortgelijke maar het had te maken met data.
Query om alle items voor de laatste maand te tonen, werkt goed zonder omstandigheden tot Jan.
Om ervoor te zorgen dat het correct werkt, nodig om een ​​jaar- en maandvariabele

toe te voegen

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)

Nu voeg ik gewoon de variabele toe in conditie:

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

Antwoord 9

Combineren van alle voorwaarden

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

Antwoord 10

Het is alleen zo dat je meerdere Whennodig hebt om een enkel geval te laten gedragen als if.. Elseif else..

  Case when 1=1       //if
   Then
    When 1=1              //else if
     Then.... 
    When .....              //else if
    Then 
    Else                      //else
   ....... 
     End

Other episodes