SQL CASE语句为if
我环顾四周,无法找到答案。据我所知,我正确使用这一点,但我很明显错过了一些东西,因为它不断返回与'关键字'CASE'附近的语法不正确'SQL CASE语句为if
我想取两个值,取决于'单词'它们返回的值是1-5。这些然后乘以一起给我一个'评级'
DECLARE @PR int
DECLARE @IR int
DECLARE @R int
DECLARE @ProbabilityRating varchar(max)
DECLARE @ImpactRating varchar(max)
SET @ProbabilityRating = 'High'
SET @ImpactRating = 'Medium'
CASE @ProbabilityRating
WHEN 'Very Low' THEN @PR = 1
WHEN 'Low' THEN @PR = 2
WHEN 'Medium' THEN @PR = 3
WHEN 'High' THEN @PR = 4
WHEN 'Very High' THEN @PR = 5
END
CASE @ImpactRating
WHEN 'Very Low' THEN @IR = 1
WHEN 'Low' THEN @IR = 2
WHEN 'Medium' THEN @IR = 3
WHEN 'High' THEN @IR = 4
WHEN 'Very High' THEN @IR = 5
END
SET @R = @IR * @PR
这是哪里出错了?
既然你重复使用case
,也许是有意义的表中有(fiddle),这些值:
create table Ratings
(
Value int
,Description varchar(20)
)
insert Ratings values
(1,'Very Low')
,(2,'Low')
,(3,'Medium')
,(4,'High')
,(5,'Very High')
然后从选择分配变量.. 。
select
@IR = r.Value
from Ratings as r
where r.[Description] = @ImpactRating
select
@PR = r.Value
from Ratings as r
where r.[Description] = @ProbabilityRating
或者,你可以只创建一个临时表(fiddle):
select
d.*
into #Ratings
from (values
('Very Low',1)
,('Low',2)
,('Medium',3)
,('High',4)
,('Very High',5)
) d([Description], Value)
select
@IR = r.Value
from #Ratings as r
where r.[Description] = @ImpactRating
select
@PR = r.Value
from #Ratings as r
where r.[Description] = @ProbabilityRating
至于你的语法问题,看起来你很难将sql case
与switch
(来自其他语言)混淆在一起,你将在其中执行不同的代码。他们看起来很相似,所以这是可以理解的。尽管如此,他们的行为却不同。据the documentation(重点煤矿):
CASE
评价了条件列表并返回多个可能的结果表达式之一。
也就是说,case语句解析为一个值。简单地将该值分配给您的变量,如下所示:
set @PR =case @ProbabilityRating
when 'Very Low' then 1
when 'Low' then 2
when 'Medium' then 3
when 'High' then 4
when 'Very High' then 5
end
+1思维未来 – 2014-09-10 13:24:06
谢谢 - 最后使用临时表 – Tom 2014-09-10 13:52:02
你做这一点:
SELECT CASE WHEN @ImpactRating = 'Very Low' THEN ... END AS @IR
或者
IF @ImpactRating = 'Very Low'
BEGIN
SET @IR = 1
END
ELSE IF @Impactrating = 'Low'
...
CASE /当在选择/更新使用/删除查询,和IF/ELSE的流量使用。希望这是有道理
DECLARE @PR int
DECLARE @IR int
DECLARE @R int
DECLARE @ProbabilityRating varchar(max)
DECLARE @ImpactRating varchar(max)
SET @ProbabilityRating = 'High'
SET @ImpactRating = 'Medium'
set @PR=(CASE @ProbabilityRating
WHEN 'Very Low' THEN 1
WHEN 'Low' THEN 2
WHEN 'Medium' THEN 3
WHEN 'High' THEN 4
WHEN 'Very High' THEN 5
END)
set @IR=(
CASE @ImpactRating
WHEN 'Very Low' THEN 1
WHEN 'Low' THEN 2
WHEN 'Medium' THEN 3
WHEN 'High' THEN 4
WHEN 'Very High' THEN 5
END)
SET @R = @IR * @PR
print @r
您的查询应该是这个样子的 编号:https://stackoverflow.com/a/14631123/2630817
精美的作品!非常感谢这个 – Tom 2014-09-10 13:17:42
这是一个很长的一个评论。
case
是典型地与select
,update
,delete
,或者set
启动一个SQL语句内的表达式。它是而不是脚本语言中的控制流逻辑,它被称为T-SQL。 if
是控制流程,但在这种情况下不需要if
。只需使用:
SET @PR = (CASE @ProbabilityRating
WHEN 'Very Low' THEN 1
WHEN 'Low' THEN 2
WHEN 'Medium' THEN 3
WHEN 'High' THEN 4
WHEN 'Very High' THEN 5
END);
SET @IR = (CASE @ImpactRating
WHEN 'Very Low' THEN 1
WHEN 'Low' THEN 2
WHEN 'Medium' THEN 3
WHEN 'High' THEN 4
WHEN 'Very High' THEN 5
END);
这看起来像T-SQL,因此我在标记它。 – 2014-09-10 13:16:38