Tsql IF…CASE返回语法错误
在寻找错误方面投入了大量时间。我使用了另外两个工作函数作为构建此函数的指南,但遗憾的是,到目前为止,我还是失败了。有人能告诉我为什么返回语法错误:Tsql IF…CASE返回语法错误,tsql,Tsql,在寻找错误方面投入了大量时间。我使用了另外两个工作函数作为构建此函数的指南,但遗憾的是,到目前为止,我还是失败了。有人能告诉我为什么返回语法错误: FUNCTION FN_USER_MATRIX_PriceTweak ( @Cost float, @CostAvg float, @Tier1MaxVal float, @Tier1Mult float, @Tier2MaxVal float, @Tier2Mult float, @Tier3MaxVal float, @Tier3Mult
FUNCTION FN_USER_MATRIX_PriceTweak
(
@Cost float, @CostAvg float,
@Tier1MaxVal float, @Tier1Mult float,
@Tier2MaxVal float, @Tier2Mult float,
@Tier3MaxVal float, @Tier3Mult float,
@Tier4MaxVal float, @Tier4Mult float,
@Tier5MaxVal float, @Tier5Mult float,
@Above5Mult float
)
RETURNS float
AS
BEGIN
DECLARE @Result float
SET @Result =
(
IF @Cost <= @CostAvg
CASE
WHEN @Cost <= @Tier1MaxVal THEN @Cost * @Tier1Mult
WHEN @Cost <= @Tier2MaxVal THEN @Cost * @Tier2Mult
WHEN @Cost <= @Tier3MaxVal THEN @Cost * @Tier3Mult
WHEN @Cost <= @Tier4MaxVal THEN @Cost * @Tier4Mult
WHEN @Cost <= @Tier5MaxVal THEN @Cost * @Tier5Mult
ELSE @Cost * @Above5Mult
ELSE
CASE
WHEN @CostAvg <= @Tier1MaxVal THEN @CostAvg * @Tier1Mult
WHEN @CostAvg <= @Tier2MaxVal THEN @CostAvg * @Tier2Mult
WHEN @CostAvg <= @Tier3MaxVal THEN @CostAvg * @Tier3Mult
WHEN @CostAvg <= @Tier4MaxVal THEN @CostAvg * @Tier4Mult
WHEN @CostAvg <= @Tier5MaxVal THEN @CostAvg * @Tier5Mult
ELSE @CostAvg * @Above5Mult
)
RETURN @Result
END
函数FN\u用户\u矩阵\u价格调整
(
@成本浮动,@CostAvg浮动,
@Tier1最大浮动,@Tier1多浮动,
@Tier2MaxVal浮点,@Tier2Mult浮点,
@Tier3MaxVal浮点,@Tier3Mult浮点,
@Tier4MaxVal浮动、@Tier4Mult浮动、,
@Tier5MaxVal浮点,@Tier5Mult浮点,
@5个以上浮点数
)
返回浮动
作为
开始
声明@Result float
设置@Result=
(
如果@Cost您应该使用嵌套的案例
,其中包含您的IF…ELSE
:
SET @Result =
(
CASE WHEN @Cost <= @CostAvg THEN (
CASE
WHEN @Cost <= @Tier1MaxVal THEN @Cost * @Tier1Mult
WHEN @Cost <= @Tier2MaxVal THEN @Cost * @Tier2Mult
WHEN @Cost <= @Tier3MaxVal THEN @Cost * @Tier3Mult
WHEN @Cost <= @Tier4MaxVal THEN @Cost * @Tier4Mult
WHEN @Cost <= @Tier5MaxVal THEN @Cost * @Tier5Mult
ELSE @Cost * @Above5Mult END)
ELSE
(CASE
WHEN @CostAvg <= @Tier1MaxVal THEN @CostAvg * @Tier1Mult
WHEN @CostAvg <= @Tier2MaxVal THEN @CostAvg * @Tier2Mult
WHEN @CostAvg <= @Tier3MaxVal THEN @CostAvg * @Tier3Mult
WHEN @CostAvg <= @Tier4MaxVal THEN @CostAvg * @Tier4Mult
WHEN @CostAvg <= @Tier5MaxVal THEN @CostAvg * @Tier5Mult
ELSE @CostAvg * @Above5Mult END)
END
)
SET@Result=
(
当@Cost时,请尝试以下方法:
IF @Cost <= @CostAvg
BEGIN
SET @Result = CASE
WHEN @Cost <= @Tier1MaxVal THEN @Cost * @Tier1Mult
WHEN @Cost <= @Tier2MaxVal THEN @Cost * @Tier2Mult
WHEN @Cost <= @Tier3MaxVal THEN @Cost * @Tier3Mult
WHEN @Cost <= @Tier4MaxVal THEN @Cost * @Tier4Mult
WHEN @Cost <= @Tier5MaxVal THEN @Cost * @Tier5Mult
ELSE @Cost * @Above5Mult
END
END
ELSE
BEGIN
SET @Result = CASE
WHEN @CostAvg <= @Tier1MaxVal THEN @CostAvg * @Tier1Mult
WHEN @CostAvg <= @Tier2MaxVal THEN @CostAvg * @Tier2Mult
WHEN @CostAvg <= @Tier3MaxVal THEN @CostAvg * @Tier3Mult
WHEN @CostAvg <= @Tier4MaxVal THEN @CostAvg * @Tier4Mult
WHEN @CostAvg <= @Tier5MaxVal THEN @CostAvg * @Tier5Mult
ELSE @CostAvg * @Above5Mult
END
END
RETURN @Result
IF@Cost您没有正确地使用IF语句。您应该使用嵌套的CASE语句,而不是相反。结果发现有两个问题没有在初始响应(或帮助菜单)中完全解释:我的CASE语句需要一个END语句,这是我不知道的要求。其次,SET的右侧不能以IF语句开头。