#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'
Если кто-нибудь хочет дать мне советы по ее очистке, я был бы признателен.