Главная страница
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
Время: 0.041 c
1-1094479078
pavelgr
2004-09-06 17:57
2004.09.19
убрать выделение


1-1093949185
tria
2004-08-31 14:46
2004.09.19
лишнее событие от мыши


14-1093688385
able
2004-08-28 14:19
2004.09.19
Как сделать два монитора независимыми друг от друга?


14-1093608857
1008
2004-08-27 16:14
2004.09.19
Как определить, что предпросмотр в QReport е завершён?


4-1088495054
Тимохов
2004-06-29 11:44
2004.09.19
Импрот функций из exe.