好的,所以我有一份学校的作业: 编写一个名为ShippingCost的函数,它将接受WeightAmount和WeightType的值 根据以下逻辑返回运费的美元金额:如果重量以磅为单位,则运费为8美元 每磅。如果重量以克为单位,运费为每克0.03美元。 1.如果函数被调用如下:ShippingCost(2,'LB')它应该返回16.00 2.如果函数被调用如下:ShippingCost(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
答案 0 :(得分:0)
您的代码看起来与您的作业无关。
首先 - 它明确表示你的函数应该为WeightAmount
和WeightType
输入值 - 那么为什么它需要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