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

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

Нужно сделать сумму запросов из двух таблиц [Progress 9.1d]


GwPlNicker ©   (2005-12-29 17:14:00) 

Есть 2 таблицы с полями:
таблица Sales
sales_date                     Дата продажи
cod_good                       Код товара
cod_shop                       Код магазина
retail_price                   Отпускная цена за
quantityC                      Количество
quantityF                      Количество
bar_cod                        Баркод
taxnal                         Налог с продаж
av_cost_price                  Учетная цена

и есть таблица Sale_out
cod_shop                       Код магазина
quantity                       Количество            
retail_price                   Отпускная цена        
sales_date                     Дата продажи          
name_out                       Причина                
bar_cod                        Баркод

Нужно подсчитать суммы бпроданного за определенный день
то есть делаю запрос

Select Sales.cod_shop, Sales.Sales_date, Sum(sales.quantityf * sales.retail_price) + Sum(sale_out.quantity * sale_out.retail_price)
FROM     sales, sale_out
WHERE (sales.cod_shops = sale_out.cod_shops)
And (sales.sales_date = sale_out.sales_date)
And (sales.sales_date = 12.27.2005)
Group By sales.cod_shop


Он выдает результат очень далекий от реального
Что может быть
Подскажите кто знает
И кто нить знает как можно использовать 2 DataSet с 1 DBGrid одновременно чтобы отображалась информация с обоих Dataset'ов
У меня Delphi 2k5


sniknik   (2005-12-30 15:19:00) [1]

не знаю как прогрес с вложенными запросами... но даты в таком виде ODBC точно не пропустит.
плюс групировка предполагает возврат нескольких сумм... что против самой идеи такого подзапроса (что с чем складывать если первый вернет 2 суммы а второй десять? а запись о магазине вообше одна ;о), сам патаешся результат "задвоить" (если на одну запись два результата по второй то... первую надо удваивать чтобы пропустить сие "безобразие"))


Johnmen   (2005-12-30 14:33:00) [2]

Ещё раз внимательней смотри [6].


GwPlNicker   (2005-12-30 13:35:00) [3]

Если запрос такого типа

SELECT     Shops.cod_shop,
                         (SELECT     SUM(sales.quantityf * sales.retail_price)
                           FROM          sales, shops
                           WHERE      (sales.cod_shop = Shops.cod_shops) AND (Sales.sales_date = 12.27 .2005)
                           Group By sales.cod_shop) +
                         (SELECT     SUM(sale_out.quantity * sale_out.retail_price)
                           FROM          sale_out, Shops
                           WHERE      (sale_out.cod_shop = Shops.cod_shops) AND (Sale_out.sales_date = 12.27 .2005)
                           Group By sales.cod_shop)
FROM         Shops

то не проходит

Я использую ОДБЦ дрова для прогресса возможно они не пропускают вложенные запросы


Johnmen   (2005-12-30 09:51:00) [4]

Здесь должна присутствовать третья таблица, справочник магазинов (M) с полем уникального идентификатора (id). Она будет "ведущей" в запросе. А эти таблицы (ссылочные A, B), будут "ведомыми".
Тогда скелет запроса такой:
SELECT
 M.name,
 (SELECT SUM(...) FROM A WHERE A.id=M.id)+
 (SELECT SUM(...) FROM B WHERE B.id=M.id),
FROM M


GwPlNicker   (2005-12-30 09:29:00) [5]


> надо подобрать такое условие, чтобы по нему одной записи
> первой таблици соответствовала строго одна из второй (или
> наоборот ;о)

а как в данном случае можно сделать я просто уже не знаю какое еще условие можно добавить
Методом проб и ошибок пробовал ничего не выходит путного


sniknik   (2005-12-29 18:17:00) [6]

надо подобрать такое условие, чтобы по нему одной записи первой таблици соответствовала строго одна из второй (или наоборот ;о).


GwPlNicker   (2005-12-29 18:04:00) [7]


> Напр. в первой 3 записи, во второй 2 записи, после соединения
> имеем 3*2=6 записей, потом идёт суммирование, причём дубликатов!
>

Так как избавиться от этих дубликатов в данном случае


Johnmen   (2005-12-29 17:55:00) [8]

>Он выдает результат очень далекий от реального
>Что может быть

Конечно. Здесь же соединение двух таблиц, а значит при наличие более одной, соединяемой по условию, записи в каждой таблице получим "умножение" записей.
Напр. в первой 3 записи, во второй 2 записи, после соединения имеем 3*2=6 записей, потом идёт суммирование, причём дубликатов!


ANB   (2005-12-29 17:28:00) [9]


> И кто нить знает как можно использовать 2 DataSet с 1 DBGrid

А как это должно в интерфейсе то выглядеть ?

По сабжу - плохо связал таблицы и схватил кортезиан.


Наверх

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