|
Select. Неверный подсчет сумм по группе
|
|||
---|---|---|---|
#18+
Добрый день! VFP 9.0. Помогите, пож-ста, новичку. Исходные данные Nomenclature.dbf Record#ARTICLE_NARTICLE_RZHD ARTICLE_C1 13185630219Блок 2 2 3187140649Втулка 33 3187141582 Мембрана тифона 4 4 3187141584 МЕМБРАНА ТИФОНА 5 5 3187141587 Тифон в сборе 6 6 3187141588 Пластина тифона 7 7 3187141589 Пластина тифона 8 8 3187141840 Вставка нижняя 9 9 3187141841 Вставка верхняя 10 10 3187141924 Поводок зубчатый 11 11 3187142054 Золотник 12 12 3187142059 Золотник 13 13 3187142245 Поводок 14 14 3187142251 Поводок Positions.dbf Record# POS_N ARTICLE QUANTITY 1 1 8 5 2 2 8 8 3 3 9 5 4 4 9 8 5 5 10 3 6 6 10 2 7 7 10 3 8 8 10 2 9 9 12 2 10 10 12 2 11 11 13 1 Article_move.dbf Record# ARTICLE QUANTITY MOVEMENT_D POSITION 1 8 1 10/10/10 1 2 9 2 10/10/10 3 3 9 3 10/10/10 3 Reorders.Dbf Record# BILL POSITION QUANTITY PRICE ARTICLE1 1 1 1 100.00 92 2 1 1 90.00 83 3 1 1 1000.00 8 Задача: Создать список товаров, по которым есть заказы HAVING SUM(Positions.quantity) > ( 0 ), посчитав по каждому из товаров сколько заказано SUM(Positions.quantity), отгружено SUM(NVL(Article_move.quantity,0)) и запланировано к огрузке SUM(NVL(Reorders.quantity,0)) Запрос: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Результат Record# ARTICLE_N ARTICLE_RZHD ARTICLE_C SUM_QUANTITY SUM_EXP_5 SUM_EXP_6 1 8 3187141840 Вставка нижняя 26 4 4 2 9 3187141841 Вставка верхняя 26 10 4 3 10 3187141924 Поводок зубчатый 10 0 0 4 12 3187142059 Золотник 4 0 0 5 13 3187142245 Поводок 1 0 0 Суть вопроса: В чем моя ошибка? Почему суммы рассчитываются неверно? Причем похоже, что только в записях с имеющимися данными для итогов в нескольких таблиц. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2010, 16:33 |
|
Select. Неверный подсчет сумм по группе
|
|||
---|---|---|---|
#18+
Voljka, в запрос особо не вчитывался, но попробуйте решить задачку попроще: есть таблица с номерами счетов(id), и есть 2 таблицы "приход"(id,amt,dt) и "расход"(id,amt,dt). Именно две, а не одна общая. Задача - посчитать остаток на счёте на заданную дату. Напишите для себя правильное решение, и тогда, скорее всего, поймёте, где у вас ошибка в этом запросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2010, 16:42 |
|
Select. Неверный подсчет сумм по группе
|
|||
---|---|---|---|
#18+
Визуально сложно понять где ошибка. Сделай такой запрос и посмотри что суммируется: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2010, 17:01 |
|
Select. Неверный подсчет сумм по группе
|
|||
---|---|---|---|
#18+
Как и у очень многих до Вас, Ваша ошибка в том, что Вы совершенно не понимаете, что же делают внешние объединения. Вот эти самые LEFT, RIGHT, FULL JOIN. Если Вы хотите получить в одной результирующей выборке суммы по таблицам, которые связаны между собой отношением много-ко-многим (например, таблица отгрузок и плановых отгрузок), то необходимо рассчитывать суммы по каждой из них в отдельности и объединять уже результат. Т.е. либо делать подзапросы, либо просто отдельные (последовательные) запросы по каждой из таких таблиц. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2010, 17:09 |
|
Select. Неверный подсчет сумм по группе
|
|||
---|---|---|---|
#18+
ВладимрМ, свою ошибку понял. tanglir, предложенная задача действительно требует той же функциональности. Поэтому предлагаю перейти к более простой предложенной задаче. Понял, что решать задачу нужно подзапросами или предварительно создавать таблицы с итогами. С таблицами реализовал, так проще, конечно. А вот с подзапросами не могу справиться. Насколько я понимаю, у меня должно быть 2 независимых подзапроса, подсчитывающих итоги по приходу/расходу, отбирающих данные по дате. Например, по приходу: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
и расходу Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Но, насколько я понял, привязать таблицы в VFP можно с помощью WHERE. Значит в результате подзапроса должно быть только одно поле - по которому идет привязка (id - идентификатор счета). Тогда откуда взять сумму. Понимаю, что решения должно быть простое, но что-то никак. Если не затруднит, сбросьте код решения задачи. ____________ Regards, Voljka ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2010, 19:39 |
|
Select. Неверный подсчет сумм по группе
|
|||
---|---|---|---|
#18+
VoljkaНо, насколько я понял, привязать таблицы в VFP можно с помощью WHERE. Значит в результате подзапроса должно быть только одно поле - по которому идет привязка (id - идентификатор счета). не только вхере, ещё и джойн :) Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2010, 21:04 |
|
|
start [/forum/topic.php?fid=41&fpage=87&tid=1584866]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 300ms |
total: | 435ms |
0 / 0 |