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

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

Проблема использования сложных запросов с агрегатами [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]

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


Наверх

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