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语句开头。