2011-11-08 16 views
1

私はこれに取り組んでおり、宣言文は理解していますが、2つ以上の宣言文が必要な場合は理解できません。私は#7896を格納するために割引テーブルを更新することになっています。タイプが初期顧客の場合、1つの変数の値を割引テーブルの最大割引額に等しく設定します。この変数の名前はhighDiscountです。次の変数の値を、最も高い割引を持つストア名(上記の手順2で見つけたもの)に設定します。この変数の名前はstoreNameです。最大割引率に10%を掛け、その結果を3番目の変数に入れます。この変数の名前はdiscountAmountです。 discountamountの結果を現在の最大割引に加算し、その値を第4変数に割り当てます。この変数の名前は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% 

と割引額から現在の最大の割引に結果を追加し、値を割り当てる方法を把握しようとしています第4変数。 SET @TotalNewDiscount = @discountAmount + @highDiscount.のようなことをすることができることは分かっていますが、私にはあまりにも多くの変数を宣言したと思います。今私はすべての変数を一緒に持つことができますが、彼らは彼らがやろうとしていることをやっていますか?

答えて

1

コードはあまり意味がありません。 @highDiscountをクエリの結果に設定した後、すぐにselect @highDiscountsと設定します。 Typoは余分なsと?

@discountAmountも宣言しますが、値を指定しないでください。その後、この初期化されていない(したがってデフォルトはNULLです)変数に10%を掛けます。これは有効な文ではありません。ヌルタイムの結果はnullになります。

10%の計算を行うために、それは

set @discountAmount = @discountAmount * 0.1; 

すべきであり、事前に割り当てられた値を持つ必要があり、そうに割引を与えるために何かが実際にあります。

+0

私はこの割引が何であるか知りません。 – norris1023

0

更新を見て、あなたは句を入れなかったので、実際にはその文はすべての行を "#7896"で更新します。 2番目のクエリについても注意してください。SELECTが多すぎます。 (ああ、trhe変数宣言にタイプミスがあります)

最も高い値引きでストア名を選択する必要があることを理解していますが、見つかったばかりの変数@highDiscountを使用していないことを覚えておいてください上記。再度WHERE句がありません。

4番目の@discountAmountは割り当てられていません。上記のように@discountAmountを計算するには、そのクエリで@highDiscountsを使用する必要があります。

0

同じテーブルを使用しているので、1つの選択を行うだけでクエリを少し改善できます。

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%  

あなたはそれに何を置くことを宣言しますが、していないためです。構文も間違っているので、Marc Bが言ったように0.10を掛ける必要があります。

1つの質問ですが、これらの変数を入力したらどうしていますか?

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' 

誰かが私にそれをきれいにするヒントを与えたいと思うなら、私はそれを感謝するでしょう。