Как добавить более одной переменной в sql

#sql

#sql

Вопрос:

Я работал над этим, и я понимаю инструкции declare, но я не понимаю, когда должно быть более двух statments объявления. Предполагается, что я обновлю таблицу скидок, чтобы сохранить # 7896, где тип — начальный клиент, установите значение одной переменной, равное сумме максимальной скидки в таблице скидок. Я назвал эту переменную highDiscount . Установите значение следующей переменной равным названию магазина с наибольшей скидкой (найдено на шаге 2 выше). Я назвал эту переменную storeName . Умножьте максимальную скидку на 10% и поместите результат в третью переменную. Я назвал эту переменную discountAmount . Добавьте результат из discountamount к текущей максимальной скидке и присвоите значение четвертой переменной. Я назвал эту переменную totalNewDiscount .

Это то, что у меня есть:

 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, умноженное на что-либо, приводит к null.

Чтобы выполнить вычисление на 10%, оно должно быть

 set @discountAmount = @discountAmount * 0.1;
  

и ей должно быть заранее присвоено значение, так что на самом деле есть на что сделать скидку.

Комментарии:

1. Я не знаю, каковы скидки на это.

Ответ №2:

Следите за ОБНОВЛЕНИЕМ, вы не поместили ни одного предложения, так что на самом деле этот оператор обновит КАЖДУЮ строку «#7896». Следите также за вторым запросом, у вас слишком много SELECT. (о, и в объявлении переменной есть опечатка)

Внимательно посмотрите на третий запрос, насколько я понимаю, вам нужно выбрать название магазина с наибольшей скидкой, но вы не используете переменную @highDiscount, только что найденную выше. И снова вам не хватает предложения WHERE.

В четвертой вы используете @DiscountAmount , которая не назначена. Как и выше, вы должны использовать @highDiscounts в этом запросе, чтобы вычислить @DiscountAmount.

Ответ №3:

Хорошо, вы можете немного улучшить свой запрос, просто выполнив один select, поскольку вы используете ту же таблицу.

 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, как сказал Марк Б.

Однако один вопрос: что вы делаете с этими переменными после их заполнения?

Ответ №4:

Я работаю над той же проблемой, и после долгих исследований я смог заставить ее работать, не уверен, что это правильно, но я не получил никаких ошибок, и результат — это то, что искал инструктор. Итак, вот оно . . .

 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'
  

Если кто-нибудь хочет дать мне советы по ее очистке, я был бы признателен.