Как выполнить несколько условий CASE WHEN с использованием SQL Server 2008?
То, что я пытаюсь сделать, это использовать более одного условия 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".
Как и в следующем коде:
IF
// CODE
ELSE IF
// CODE
ELSE IF
// CODE
ELSE
// CODE
Ответы
Ответ 1
Существуют два формата выражения case. Вы можете сделать 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
Ответ 2
Просто используйте это, вы должны использовать больше, когда они являются классами.
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)
Ответ 3
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
Ответ 4
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
Ответ 5
У меня был подобный, но он имел дело с датами.
Запрос, чтобы показать все элементы за последний месяц, отлично работает без условий до января.
Для правильной работы необходимо добавить переменную года и месяца
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)[email protected] and MONTH(creationtime)[email protected])
Ответ 6
Объединяя все условия
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 )
)
Ответ 7
Это может быть эффективный способ выполнения различных тестов для одного оператора
select
case colour_txt
when 'red' then 5
when 'green' then 4
when 'orange' then 3
else 0
end as Pass_Flag
это работает только при сравнении сравнений!