![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как обойтись одним запросом [D5, Yaffil]
TohaNik © (2003-04-01 12:04:00)Доврый день.
Подскажите как это решается.
По первому запросу получаем сумму заказанного по сонтракту(CTRID)
select
SUM(POSITIONS.POS_WEIGHT*POSITIONS.POS_PRICE)AS SUM_CONTRACT,
CONTRACTS.CTRID
FROM POSITIONS, ORDERS, CONTRACTS
WHERE (POSITIONS.ORDID = ORDERS.ORDID) AND
(ORDERS.CTRID = CONTRACTS.CTRID)
GROUP BY CONTRACTS.CTRID
По второму запросу получаем сумму проплат по контракту(CTRID)
select INCOMES.CTRID, SUM(INCOMES.INSUM) AS SUM_CONTRACT
from INCOMES
GROUP BY INCOMES.CTRID
Как получить результат где CTRID будет соотв-ть сумма заказанного и сумма проплаченного.
TohaNik (2003-04-01 16:17:00) [1]Спасибо.
Решил при помощи лукапов в FastRep, но всетаки интересно:
после
select
sum(POSITIONS.POS_WEIGHT*POSITIONS.POS_PRICE) as SUM_CONTRACT,
CONTRACTS.CTRID,
INCOMES.CTRID, SUM(INCOMES.INSUM) AS SUM_CONTRACT
FROM POSITIONS, ORDERS, CONTRACTS LEFT JOIN INCOMES
ON CONTRACTS.CTRID = INCOMES.CTRID
WHERE (POSITIONS.ORDID = ORDERS.ORDID) AND
(ORDERS.CTRID = CONTRACTS.CTRID)
как группировать-
если
GROUP BY CONTRACTS.CTRID, INCOMES.CTRID
то сумы по контрактам(CONTRACTS.CTRID) верные, а сумы по проплатам(INCOMES.CTRID) увеличиваются соответственно количеству
позиций (POSITIONS.ORDID) всех заказов(ORDERS.CTRID) группируемого(CONTRACTS.CTRID)
Ну если по контракту был заказ с тремя позициями на сумму 50 000
и была проплата на 10 000, а получаем 30 000.
В принципе понятно почему, но как обойти.
Соловьев (2003-04-01 12:08:00) [2]связать INCOMES и CONTRACTS через JOIN