TSQL 函数如果、否则或大小写



好的,所以我有一个即将到期的学校作业,上面写着:编写一个名为 ShippingCost 的函数,它将接收 WeightAmount 和 WeightType 的值,然后根据以下逻辑返回运费的美元金额: 如果重量以磅为单位,则运费为 8 美元每磅。如果重量以克为单位,运费为每克 0.03 美元。1. 如果像这样调用函数:ShippingCost(2, 'LB'),它应该返回 16.002. 如果像这样调用函数:运费(2,'G'),它应该返回 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

最新更新