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