2011-11-08 112 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' 

如果有人想給我提示清理它,我將不勝感激。