![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема использования сложных запросов с агрегатами [D6, Paradox]
highlander © (2005-05-27 15:29:00)Есть такой код:
select
products.kod,0,0,sum(oderj.kilkist),sum(oderj.summa),sum(razhod.kilkist),
sum(razhod.kilkist)*razhod.cena,sum(oderj.kilkist)-sum(razhod.kilkist),
sum(oderj.summa)- sum(razhod.kilkist)*razhod.cena
from products
join oderj on oderj.kod_tovar=products.kod
join razhod on razhod.kod_tovar=products.kod
where oderj.kod_tovar not in (select poch_zalish.kod_tovar from poch_zalish)
and razhod.kod_tovar not in (select poch_zalish.kod_tovar from poch_zalish)
and oderj.data_nakl between '01.04.05' and '30.04.05'
and razhod.data_nakl between '01.04.05' and '30.04.05'
group by products.kod,oderj.kod_tovar,razhod.kod_tovar
Данный код предназначен для выборки из 4 таблиц парадокса (products(kod N,name A),poch_zalish(kod_tovar N, suma $),oderj(kod_tovar A, cena $,summa $, data_nakl D), razhod(kod_tovar A, cena $,data_nakl D)). Запрос выполняется, но не совсем правильно. Выборка по полям sum(oderj.kilkist) и sum(oderj.summa) выполняется правильно. А вот по полям sum(razhod.kilkist) и sum(razhod.kilkist)*razhod.cena суммирование производится дважды. Почему?
evvcom (2005-05-27 17:09:00) [1]или вместо inner - left, right, full в зависимости от задачи
evvcom (2005-05-27 17:07:00) [2]В "продвинутых" можно: MSSQL, Oracle, наверное в IB, FB. Реализуется так
select t1.id, sq2.sum1, sq3.sum2
from t1
inner join (select id, sum(field1) as sum1 from t2 group by id) sq2
on sq2.id=t1.id
inner join (select id, sum(field2) as sum2 from t3 group by id) sq3
on sq3.id=t1.id
highlander (2005-05-27 17:00:00) [3]а можно узнать в какой субд такое можно сделать и как (на основе вышеуказанного запроса)
Johnmen (2005-05-27 16:50:00) [4]Вообще можно. Но в частности (Парадох) - нельзя.
highlander (2005-05-27 16:46:00) [5]А одним запросом никак нельзя? Вообще никак??
Johnmen (2005-05-27 16:00:00) [6]Выход один - сделать 2 запроса. Или 3. Сколько надо, короче...
highlander (2005-05-27 15:59:00) [7]Но должен ведь быть какой-то выход!! перейти на другую базу уже нет времени да и возможности.
Johnmen (2005-05-27 15:51:00) [8]>highlander (27.05.05 15:49) [3]
Не парься. В Парадоксе одним, сколь угодно сложным запросом, это не реализуемо.
highlander (2005-05-27 15:49:00) [9]Johnmen ©
а как исправить? можете подсказать? а то голова не соображает уже. еще со вчерашнего дня парюсь.
Johnmen (2005-05-27 15:41:00) [10]...до агрегирования.
Johnmen (2005-05-27 15:39:00) [11]Потому, что после соединения они дважды присутствуют в наборе данных.