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

Откуда:
Сообщений: 9
Доброго дня. Никак не дойдет как построить запрос.
Есть таблица
ACFLAMOUNT
a01112
a01213
a02114
a02215
a03116
a03217
a04116
a04215

Мне нужно получить сумму, которая считается по формуле: sum(a01, a02 по FL 1) + sum(a03, a04 по FL 2)

Запрос следующий
select
sum(T1.amount)+sum(T2.amount)
from
worktable t1,
worktable t2
where
t1.ac in ('a01', 'a02') and
t1.fl = '1' and
t2.ac in ('a03', 'a04') and
t2.fl = '2'


По идее должен получиться результат (12 + 14) + (17 + 15) = 58. Сумма получается гораздо больше правильной. Что я делаю не так?
13 июн 13, 14:21    [14428371]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление sum() + sum()  [new]
Glory
Member

Откуда:
Сообщений: 104760
Используйте CASE внутри SUM
13 июн 13, 14:24    [14428405]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление sum() + sum()  [new]
SHok_by
Member

Откуда: Minsk
Сообщений: 51
SELECT SUM(AMOUNT) as Result FROM worktable
WHERE (AC IN ('a01', 'a02') AND FL = 1) OR (AC IN ('a03', 'a04') AND FL = 2)
13 июн 13, 14:40    [14428548]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление sum() + sum()  [new]
pigzi
Member

Откуда:
Сообщений: 9
Всем спасибо за помощь - понял в чем ошибка
13 июн 13, 15:49    [14429209]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление sum() + sum()  [new]
pigzi
Member

Откуда:
Сообщений: 9
Извиняюсь, но опять туплю.

2 таблицы
worktable
ACFLAMOUNT
a01112
a01213
a02114
a02215
a03116
a03217
a04116
a04215
a01313
a02315
a03316
a04317


acc
ACDESCRIPTION
b01name1
b02name2
b03name3
b04name4
b05name5
b06name6
b07name7


b01 соответствует a01
b02 соответствует a02
b03 соответствует a03
b04 соответствует a04

нужно рассчитать
b01 = a01 (по fl 3) / (sum(a01, a02 по FL 1) + sum(a03, a04 по FL 2))
b02 = a02 (по fl 3) / (sum(a01, a02 по FL 1) + sum(a03, a04 по FL 2))
b03 = a03 (по fl 3) / (sum(a01, a02 по FL 1) + sum(a03, a04 по FL 2))
b04 = a04 (по fl 3) / (sum(a01, a02 по FL 1) + sum(a03, a04 по FL 2))

запрос
SELECT
	t1.ac,
	t3.amount / (t2.amount)

FROM acc t1,
	worktable t2,
	worktable t3
WHERE
	t3.fl = '3' and
	t3.ac = case t1.ac
		when 'b01' then 'a01'
		when 'b02' then 'a02'
		when 'b03' then 'a03'
		when 'b04' then 'a04' end  
	and
	(t2.ac IN ('a01', 'a02') AND t2.fl = 1) OR (t2.ac IN ('a03', 'a04') AND t2.fl = 2) GROUP BY t1.ac

возвращает ошибки
13 июн 13, 19:41    [14430438]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление sum() + sum()  [new]
gang
Member

Откуда:
Сообщений: 1394
pigzi,

У Вас классическая сферическая ошибка в вакууме. Для ее исправления нуден ключ на 13 и масло обязательно 0W40 лейте.
14 июн 13, 09:58    [14432129]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление sum() + sum()  [new]
pigzi
Member

Откуда:
Сообщений: 9
gang, благодарю за помощь! сегодня утром сам разобрался в ошибке. без ключа и масла не получилось бы)
14 июн 13, 15:31    [14434420]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить