2011-11-08 75 views
1

我一直在研究这一点,并且理解了declare语句,但是当需要超过2个declare语句时我不理解它。我应该更新折扣表以存储类型为初始客户的#7896,将一个变量的值设置为等于折扣表中的最大折扣金额。我将这个变量命名为highDiscount。将下一个变量的值设置为折扣最高的商店名称(在上面的步骤2中找到)。我将这个变量命名为storeName。将最大折扣乘以10%,并将结果输入第三个变量。我将这个变量命名为discountAmount。将discountamount的结果添加到当前最大折扣并将值分配给第四个变量。我将这个变量命名为totalNewDiscount如何向sql添加多个变量

这是我有:

Use pubs 
UPDATE dbo.discounts 
Set Stor_Id = '#7896' 

Declare @highDiscount money; 
Set @highDiscount = (Select MAX(discounts) From [dbo].discounts); 
Select @highDiscounts; 

Declare @ storeName money; 
Set @storeName =(SELECT Max(discounttype)FROM dbo.discounts) 

Declare @discountAmount money; 
Set @discountAmount = @discountAmount * 10% 

在这个时候是我和我试图找出如何从贴现量结果加到当前的最大折扣和分配值第四个变量。我知道我可以做一些像SET @TotalNewDiscount = @discountAmount + @highDiscount.但对我来说,我认为我已经宣布了太多的变数。现在我能够将所有变量集中在一起,但是他们正在做他们应该做的事情吗?

回答

1

该代码没有多大意义。您将@highDiscount设置为查询的结果,然后立即设置select @highDiscounts。错过额外的s

您还声明@discountAmount,但不要给它一个值。然后你将这个未初始化的变量(所以它默认为NULL)乘以10%,这不是一个有效的语句。空的时候任何事情都会导致null。

要做到10%计算,应该是

set @discountAmount = @discountAmount * 0.1; 

,应该有一个值分配给它提前,所以实际上有什么东西给一个折扣。

+0

我不知道这是什么折扣。 – norris1023

0

小心UPDATE,你没有放任何子句,所以实际上这个语句会用“#7896”更新每一行。 还要注意第二个查询,你有太多的SELECT。 (哦,并且在trhe变量声明中存在拼写错误)

仔细查看第三个查询,因为我知道您必须选择具有最高折扣的商店名称,但是您不使用刚刚找到的变量@highDiscount以上。再次,你缺少一个WHERE子句。

第四个使用@discountAmount,它没有分配。如上所述,您必须在该查询中使用@highDiscounts来计算@discountAmount。

0

好吧,您可以通过只做一个选择来改善您的查询,因为您使用的是同一张表。

Use pubs 

UPDATE 
    dbo.discounts 
Set 
    Stor_Id = '#7896' 
WHERE 
    ??????????? -- This needs something to specify which row you want updates 

Declare @highDiscount money; 
Declare @storeName money; 
Declare @discountAmount money; 

SELECT 
    @highDiscount = MAX(discounts), 
    @storeName = Max(discounttype) 
FROM 
    dbo.discounts 

现在,这不会工作

Declare @discountAmount money;  
Set @discountAmount = @discountAmount * 10%  

这是因为你已经宣布它,但不能放东西进去。语法也是错误的,你需要乘以0.10,正如Marc B所说的那样。

虽然有一个问题,一旦你填充它们,你对这些变量做了什么?

0

我正在研究同样的问题,经过大量的研究后,我能够得到它的工作,不知道它是否正确,但我没有得到任何错误,结果是教练正在寻找什么。所以,在这里。 。 。

UPDATE dbo.discounts 
SET stor_id = '7896' 
WHERE discounttype = 'initial customer' 
GO 

DECLARE @highDiscount money; 
SET @highDiscount = (SELECT MAX(discount) FROM dbo.discounts); 

DECLARE @storeName varchar(40); 
SELECT @storeName = stor_name 
FROM dbo.stores st 
INNER JOIN dbo.discounts di 
ON st.stor_id = di.stor_id 
WHERE discount = @highDiscount; 


DECLARE @discountAmount money; 
SET @discountAmount = @highDiscount * .10 

DECLARE @totalNewDiscount money; 
SET @totalNewDiscount = @discountAmount + @highDiscount 

SELECT @storeName 'Store Name', 
     @highDiscount 'High Discount', 
    @discountAmount 'Discount Amount', 
    @totalNewDiscount 'Total New Discount' 

如果有人想给我提示清理它,我将不胜感激。