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

Откуда: Москва
Сообщений: 4
Есть таблица BA бюджетных акций.
В таблице есть поля:
type – тип акции,
kol – кол-во продукта, прошедшего по акции,
price1 – цена единицы продукции,
sum – общая стоимость продукции, причём sum = kol * price1
status - статус акции.

Type и price1 уже заполнены. Нужно заполнить sum и kol. Kol рассчитывается по-разному в зависимости от значения type.

Составляю запрос:
SELECT
type
, price1
, kol = CASE 
 WHEN type = '561551' THEN (SELECT SUM(X2) FROM table2 WHERE условия)
 WHEN type = '561552' THEN (SELECT SUM(X3) FROM table3 WHERE условия)
 WHEN type = '561553' THEN (SELECT SUM(X4) FROM table4 WHERE условия)
 ELSE ’’ END
--Понимаю, дальше неправильно
, sum=kol*price1
FROM BA
WHERE BA.status = 'A' 
Подскажите пожалуйста, как правильно?
8 ноя 11, 13:13    [11563188]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с использованием case и дальнейшими расчётами на основе последнего  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
CTE, derived table.
8 ноя 11, 13:32    [11563341]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с использованием case и дальнейшими расчётами на основе последнего  [new]
NYX
Member

Откуда: Москва
Сообщений: 4
Спасибо, invm, что направили на путь истинный. Сделал вот так:
WITH Info (Iid, Itype, Iprice1, Ikol) AS
(
SELECT
id AS Iid
, type AS Itype
, price1 as Iprice1
, Ikol = CASE 
 WHEN type = '561551' THEN (SELECT SUM(X2) FROM table2 WHERE условия)
 WHEN type = '561552' THEN (SELECT SUM(X3) FROM table3 WHERE условия)
 WHEN type = '561553' THEN (SELECT SUM(X4) FROM table4 WHERE условия)
 ELSE ’’ END
FROM BA
WHERE BA.status = 'A' 
)
SELECT id, type, Ikol, Ikol * Iprice1 as summ
FROM BA INNER JOIN Info ON BA.Id = Info.Iid AND Ikol IS NOT NULL

А как теперь этот запрос оптимизировать, потому что он явно медленно работает?
8 ноя 11, 17:47    [11565547]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить