Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Результат сумирования одной строкой, а не двумя [D6, IB6.x]


korvin ©   (2004-08-19 13:43:00) 

запрос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
обращаясь к которой
запрос2 select pole_name, sum(pole1) from procedure1 where pole2=10получаю наконец итог одной строкой.
Из-за большого количества записей в таблицах tabl1 и tabl2 такая процедура "умирает" секунд на 40-60 на мощной машине.
Покажите пожалуйста на этом примере куда в процедуру можно втиснуть параметры и как их передавать из программы для поля pole2 через запрос1</b.


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

where t2.id_pole=t 1.id_pole


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

попробуй так
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


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

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


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

Соловьев ©   (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.
К чему бы ещё уникальность привязать?


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

забыл
+
group by t1.id_pole


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

а если так:
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 13:48:00) [7]

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо