Форум: "Базы";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
ВнизРезультат сумирования одной строкой, а не двумя Найти похожие ветки
← →
korvin (2004-08-19 13:43) [0]запрос1</b
select id_pole, sum(pole1) from tabl1
union
select id_pole, sum(pole1) from tabl2
даёт результат двумя строчками. В обход делаю серверную процедуру:procedure1begin
обращаясь к которой
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.035 c