Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.19;
Скачать: CL | DM;

Вниз

Результат сумирования одной строкой, а не двумя   Найти похожие ветки 

 
korvin   (2004-08-19 13:43) [0]

запрос1</b
select id_pole, sum(pole1) from tabl1
union
select id_pole, sum(pole1) from tabl2

даёт результат двумя строчками. В обход делаю серверную процедуру:procedure1
begin
 for select id_pole, sum(pole1) from tabl1
 group by id_pole
 union
 select id_pole, sum(pole1) from tabl1
 group by pole_name
 into  :pole_name,
       :pole1
 do suspend;
end
обращаясь к которой
запрос2select pole_name, sum(pole1) from procedure1 where pole2=10 получаю наконец итог одной строкой.
Из-за большого количества записей в таблицах tabl1 и tabl2 такая процедура "умирает" секунд на 40-60 на мощной машине.
Покажите пожалуйста на этом примере куда в процедуру можно втиснуть параметры и как их передавать из программы для поля pole2 через запрос1</b.


 
Карелин Артем ©   (2004-08-19 13:46) [1]

select (select id_pole, sum(pole1) from tabl1)+(select id_pole, sum(pole1) from tabl2) from rdb$database


 
Карелин Артем ©   (2004-08-19 13:48) [2]

Ошибся слегка. [1] работать в принципе не будет.


 
Соловьев ©   (2004-08-19 14:04) [3]

а если так:
select t1.id_pole, sum(t1.pole1+t2.pole1)
from table1 t1 join table2 t2 on t1.id_pole=t2.id_pole


 
Соловьев ©   (2004-08-19 14:05) [4]

забыл
+
group by t1.id_pole


 
korvin   (2004-08-19 18:21) [5]

Соловьев ©   (19.08.04 14:04) [3]
Соловьев ©   (19.08.04 14:05) [4]

Да, это почти то, что нужно. Только вот суммы эти умножаются кратно количеству записей в tabl2 (из таблицы 1 берёт первую запись столько раз, сколько записей во второй таблице).
Например: в tabl1 по заданным условиям найдены значения 1, 5, 3, а во втором tabl им соответствуют записи со значениями 2, 1 (две записи). То запрос выдаёт сумму: 1*2+5*2+3*2+2*3+1*3=37, а должно бы: 1+5+3+2+1=12.
К чему бы ещё уникальность привязать?


 
korvin   (2004-08-19 18:22) [6]

Апшибся и я 1*2+5*2+3*2+2*3+1*3=27, но всё равно это не 12 как должно бы ...


 
Соловьев ©   (2004-08-19 18:30) [7]

попробуй так
select t1.id_pole, sum(t1.pole1+(
select sum(t2.pole1)
from table2 t2
where t2.id_pole=t2.id_pole
))
from table1 t1
group by t1.id_pole


 
Соловьев ©   (2004-08-19 18:31) [8]

where t2.id_pole=t1.id_pole



Страницы: 1 вся ветка

Текущий архив: 2004.09.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 1.22 c
1-1094116820
Till
2004-09-02 13:20
2004.09.19
ABC компоненты


1-1094211044
DesWind
2004-09-03 15:30
2004.09.19
Глюк с фрэймами


1-1094022757
BRemB
2004-09-01 11:12
2004.09.19
Вопрос про Record


9-1085321983
_Jenaxx_
2004-05-23 18:19
2004.09.19
Помогите устранить ошибку(столкновение).


1-1093687684
Lefan
2004-08-28 14:08
2004.09.19
Как написать плагин к своей программе?