Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Условие для выборки значения из таблицы.  [new]
pompaok
Member

Откуда:
Сообщений: 2
Есть база данных книг. Вот её диаграмма http://s014.radikal.ru/i327/1206/25/b61cd9896914.png
Есть триггер в котором высчитывается продажа книг, то есть, продали определенное количество книг, из магазина исчезло это количество, в таблицу Sell занеслось сколько ушло книг, когда почем и т.д., так же заносится гонорар автору в таблицу Author.

В этом триггере
Update dbo.Author set Honorarium=cast(ISNULL(Honorarium,0) as float) + cast(ISNULL(share,100) as float)/s*@Price*@Quantity*.1
вот форума по которой высчитывается гонорар автору. В этой формуле автору идет 10% (.1) от продаж книг.
Нужно чтобы из этой таблицы http://s019.radikal.ru/i638/1206/ce/a8800341b525.png
выбирался процент, какой пойдет автору в зависимости от количества проданных книг.
То есть нужно заменить 0.1 на то что нужно, вот как это сделать?
Промежуточные значения тоже важны и нужны.

Вот код триггера собственно.

USE [Groups]
GO
/****** Object: Trigger [dbo].[tr_sell_ui] Script Date: 06/13/2012 20:20:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: dada
-- Create date:
-- Description:
-- =============================================
ALTER TRIGGER [dbo].[tr_sell_ui]
ON [dbo].[Sell]
AFTER INSERT,UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for trigger here
declare @Quantity int, @Price money, @BookID int, @asd int
Select @Quantity = Quantity,@Price = Price, @BookID = BookID from inserted

update dbo.Books set Quantity = Quantity-@Quantity
Where ID = @BookID


;
with b as(
select [BookID], sum(isnull([Share],100)) s
from dbo.Relation
where [BookID]=@BookID
group by [BookID]
)
Update dbo.Author set Honorarium=cast(ISNULL(Honorarium,0) as float) + cast(ISNULL(share,100) as float)/s*@Price*@Quantity*.1

FROM [dbo].[Relation] r
inner join b on r.BookID=b.BookID
inner join dbo.Author a on r.AuthorrID=a.AuthorID



END
13 июн 12, 20:27    [12710337]     Ответить | Цитировать Сообщить модератору
 Re: Условие для выборки значения из таблицы.  [new]
Lasa
Member

Откуда: Canada
Сообщений: 81
как вариант, объявите переменную , присвойте значение этой переменной, выполнив нужный запрос и вместо .1 используйте эту переменную

...
declare @Quantity int, @Price money, @BookID int, @asd int
...
DECLARE @Percent int
SET @Percent = (SELECT  Top(1) royalty FROM Royalty_Plan WHERE quantity = @Quantity)
...
Update dbo.Author set Honorarium=cast(ISNULL(Honorarium,0) as float) + cast(ISNULL(share,100) as float)/s*@Price*@Quantity * @Percent 
14 июн 12, 23:09    [12716674]     Ответить | Цитировать Сообщить модератору
 Re: Условие для выборки значения из таблицы.  [new]
Lasa
Member

Откуда: Canada
Сообщений: 81
забыла на 100 разделить -
...@Quantity * @Percent/100
14 июн 12, 23:11    [12716681]     Ответить | Цитировать Сообщить модератору
 Re: Условие для выборки значения из таблицы.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
pompaok
Select @Quantity = Quantity,@Price = Price, @BookID = BookID from inserted


Никогда не используйте такие конструкции. Они дадут неверные данные, если вставляется или обновляется больше 1 строки.

Чтобы заменить статическое значение доли на динамическое, делайте джойн с таблицей долей.
14 июн 12, 23:46    [12716768]     Ответить | Цитировать Сообщить модератору
 Re: Условие для выборки значения из таблицы.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
pompaok, еще одна ошибка - если строка не добавляется, а обновляется, то количество в таблице books станет некорректным.

Смотрите - добавили запись о продаже 10 книг. Количество книг уменьшилось на 10. Исправили, поменяв в записи количество проданных книг на 5. Количество книг уменьшилось еще на 5, хотя должно было увеличиться (мы же заменили данные о продаже, а не добавили новую продажу).
14 июн 12, 23:48    [12716773]     Ответить | Цитировать Сообщить модератору
 Re: Условие для выборки значения из таблицы.  [new]
pompaok
Member

Откуда:
Сообщений: 2
Большое спасибо! Решил немножко другим путём, но всё равно спасибо! Ваши версии тоже учту ;)
15 июн 12, 10:20    [12717619]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить