Главная страница
    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.46 MB
Время: 0.029 c
1-1119466284
Monk
2005-06-22 22:51
2005.07.11
Предпросмотр печати


9-1107411201
megabyte-ceercop
2005-02-03 09:13
2005.07.11
Я вот тут выложил альфу третьего Киркопа :)


9-1111794303
Octree
2005-03-26 02:45
2005.07.11
[GLScene] Кто нибудь использовал Octree для больших карт ?


14-1118194550
dr Tr0jan
2005-06-08 05:35
2005.07.11
Самый длинный домен


3-1117090760
Tomkat
2005-05-26 10:59
2005.07.11
Скрипт на базе штатными средствами





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский