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

Вниз

Проблема использования сложных запросов с агрегатами   Найти похожие ветки 

 
highlander   (2005-05-27 15:29) [0]

Есть такой код:
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 суммирование производится дважды. Почему?


 
Johnmen ©   (2005-05-27 15:39) [1]

Потому, что после соединения они дважды присутствуют в наборе данных.


 
Johnmen ©   (2005-05-27 15:41) [2]

...до агрегирования.


 
highlander   (2005-05-27 15:49) [3]

Johnmen ©
а как исправить? можете подсказать? а то голова не соображает уже. еще со вчерашнего дня парюсь.


 
Johnmen ©   (2005-05-27 15:51) [4]

>highlander   (27.05.05 15:49) [3]

Не парься. В Парадоксе одним, сколь угодно сложным запросом, это не реализуемо.


 
highlander   (2005-05-27 15:59) [5]

Но должен ведь быть какой-то выход!! перейти на другую базу уже нет времени да и возможности.


 
Johnmen ©   (2005-05-27 16:00) [6]

Выход один - сделать 2 запроса. Или 3. Сколько надо, короче...


 
highlander   (2005-05-27 16:46) [7]

А одним запросом никак нельзя? Вообще никак??


 
Johnmen ©   (2005-05-27 16:50) [8]

Вообще можно. Но в частности (Парадох) - нельзя.


 
highlander   (2005-05-27 17:00) [9]

а можно узнать в какой субд такое можно сделать и как (на основе вышеуказанного запроса)


 
evvcom ©   (2005-05-27 17:07) [10]

В "продвинутых" можно: 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


 
evvcom ©   (2005-05-27 17:09) [11]

или вместо inner - left, right, full в зависимости от задачи



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

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

Наверх




Память: 0.49 MB
Время: 0.027 c
14-1118222987
MadAngel
2005-06-08 13:29
2005.07.11
Посоветуйте цифровик


8-1111083959
Leeechhhh
2005-03-17 21:25
2005.07.11
Как сделать выделение прямоугольником


6-1112684047
frEE)stylEr
2005-04-05 10:54
2005.07.11
подключение удалённого доступа


1-1118293585
AndreW1
2005-06-09 09:06
2005.07.11
hint в выпадающем списке Combobox


1-1118746336
Define
2005-06-14 14:52
2005.07.11
Можно ли программно сделать DragDrop объекта