TSQL 函数 If、Else 或 Case

TSQL Function If, Else, or Case

好的,我有一份学校作业要交,上面写着: 编写一个名为 ShippingCost 的函数,它将接受 WeightAmount 和 WeightType 的值,然后 return 基于此逻辑的运费金额:如果重量以磅为单位,则运费为 8 美元 每磅。如果重量以克为单位,运费为每克 0.03 美元。 1. 如果像这样调用函数:ShippingCost(2, ‘LB’) 它应该 return 16.00 2. 如果像这样调用函数:ShippingCost(2,'G') 它应该 return 0.06

我有点不知所措,想弄清楚我是怎么做到的。这就是我所拥有的,它离工作还差得很远。我不太明白这个概念。如有任何帮助,我们将不胜感激。

Create Function ShippingCost (@ShippingCost DECIMAL (8,2))
RETURNS DECIMAL
AS
    BEGIN
            DECLARE @ShippingCostLB decimal (8,2)
            DECLARE @ShippingsCostG decimal (8,2)
            DECLARE @ShippingWeight decimal (8,2)
            DECLARE @WeightType char (2)
            SET @ShippingCostLB = '8'
            SET @ShippingsCostG = '.03'
            SET @WeightType = ''
            SET @ShippingWeight = ''
    END
                    IF @WeightType = 'LB'
                    BEGIN
                        SET @ShippingCost = @ShippingWeight*@ShippingCostLB
                    END
                ELSE
                    BEGIN
                        SET @ShippingCost = [Weight]*@ShippingsCostG
                    END
    RETURN @ShippingCost
    END

您的代码看起来与您的作业关系不大。

首先 - 它明确表示你的函数应该接受 WeightAmountWeightType 的输入值 - 所以为什么它接受 ShippingCost 作为输入并将 WeightType 声明为本地变量?

其次 - 第 13 行 END 的目的是什么?事实上,由于 END 关键字不匹配,您的函数将无法编译。

函数体 - 根据您的描述,条件非常简单,其实现非常简单:

Create Function ShippingCost (@WeightAmount DECIMAL (8,2), @WeightType char(2))
RETURNS DECIMAL
AS
BEGIN
        DECLARE @ShippingCost decimal (8,2)

        IF @WeightType = 'LB'
            SELECT @ShippingCost = 8 * @WeightAmount
        ELSE IF @WeightType = 'G'
            SELECT @ShippingCost = 0.03 * @WeightAmount

       RETURN @ShippingCost
END

请注意,条件(在您的情况下是整个函数体)可以使用 case 语句以更简单易读的形式编写:

Create Function ShippingCost (@WeightAmount DECIMAL (8,2), @WeightType char(2))
RETURNS DECIMAL
AS
BEGIN

    RETURN CASE
               WHEN @WeightType = 'LB' THEN 8 * @WeightAmount
               WHEN @WeightType = 'G' THEN 0.03 * @WeightAmount
           END
END