web-dev-qa-db-fra.com

Comment créer plusieurs conditions CASE WHEN à l'aide de SQL Server 2008?

Ce que j'essaie de faire est d'utiliser plus d'une condition CASE WHEN pour la même colonne.

Voici mon code pour la requête:

   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)

Cependant, ce que je veux faire, c'est utiliser plus d'un WHEN pour la même colonne "quantité".

Comme dans le code suivant:

IF
// CODE
ELSE IF
// CODE
ELSE IF
// CODE
ELSE
// CODE
146
Nils Anders

Il y a deux formats d'expression de casse . Vous pouvez faire CASE avec plusieurs WHEN as;

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

ou une expression simple CASE

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

ou CASE dans CASE as;

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

Il suffit d'utiliser celui-ci, vous devez utiliser plus quand ils sont des classes.

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

Vous pouvez utiliser ci-dessous un exemple de cas avec plusieurs conditions.

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
3
Abhijeet Navgire

Cela peut être un moyen efficace d'effectuer différents tests sur une seule instruction.

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

cela ne fonctionne que sur les comparaisons d'égalité!

2
user2082785
    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
1
Jimoc
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
wennykikkok

Combinant toutes les 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 )                 
    )
0
Arun Prasad E S

J'avais un semblable mais il s'agissait de dates. Requête pour afficher tous les éléments du mois dernier, fonctionne très bien sans conditions jusqu'à janvier. Pour que cela fonctionne correctement, il fallait ajouter une variable année et mois.

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)

Maintenant, je viens d'ajouter la variable en condition: ...

(year(CreationTime)=@yr and MONTH(creationtime)=@mth)
0
Douglas Bentley