Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> update поля по просуммированным данным 
:(
    Опции темы
FINANSIST
Дата 20.1.2010, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Статус: Жив
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 11.4.2008
Где: Москва

Репутация: 1
Всего: 23



Задача : просуммировать данные 2-х таблиц (группировка по датам) и вставить сгруппированные и просуммированные данные в 3 временную таблицу
Пытался сделать 1 запросом
Код

INSERT INTO SelectSets ( DateVal, OrderSum, ShippingSum, AutoSelect )
SELECT als.DATA, Sum(f_zak.TON) AS [Sum-TON], Sum(otfact.VES) AS [Sum-VES], True AS Выражение1
FROM f_zak INNER JOIN (otfact INNER JOIN (SELECT distinct otfact.DATA
FROM otfact ORDER BY otfact.DATA) AS als ON otfact.DATA = als.DATA) ON f_zak.DATE = als.DATA
GROUP BY als.DATA, True
ORDER BY als.DATA;

Виснет на неопределенное время
Решил сделать разбить запрос на каскад запросов (все равно в итоге все в VBA модуль запихаю), первый запрос на вставку факт.отгрузок прокатывает 
Код

INSERT INTO SelectSets ( DateVal, ShippingSum, AutoSelect )
SELECT als.DATA, Sum(otfact.VES) AS [Sum-VES], True AS Выражение1
FROM otfact INNER JOIN [SELECT distinct otfact.DATA
FROM otfact ORDER BY otfact.DATA]. AS als ON otfact.DATA = als.DATA
GROUP BY als.DATA, True
ORDER BY als.DATA;



А вот второй (апдейт поля по заказам) не работает
Код

update selectsets,(select date, sum(ton) as ston from f_zak group by date) as als
set selectsets.ordersum = als.ston 
where selectsets.dateval = als.date

Как быть?

Это сообщение отредактировал(а) FINANSIST - 20.1.2010, 13:37


--------------------
“...Брали корову рыжую одну, отдавать будем корову рыжую одну, чтобы не нарушать отчетности”
Эдуард Успенский, “Каникулы в Простоквашино”
PM MAIL ICQ   Вверх
Akina
Дата 20.1.2010, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Сделать подзапрос статическим запросом.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
FINANSIST
Дата 20.1.2010, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Статус: Жив
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 11.4.2008
Где: Москва

Репутация: 1
Всего: 23



Цитата(Akina @  20.1.2010,  13:27 Найти цитируемый пост)
Сделать подзапрос статическим запросом. 


Цитата(FINANSIST @  20.1.2010,  13:21 Найти цитируемый пост)
 в итоге все в VBA модуль запихаю)

Запросы то я удалю потом (и статичные в т.ч.)...

Это сообщение отредактировал(а) FINANSIST - 20.1.2010, 13:39


--------------------
“...Брали корову рыжую одну, отдавать будем корову рыжую одну, чтобы не нарушать отчетности”
Эдуард Успенский, “Каникулы в Простоквашино”
PM MAIL ICQ   Вверх
FINANSIST
Дата 20.1.2010, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Статус: Жив
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 11.4.2008
Где: Москва

Репутация: 1
Всего: 23



В итоге нашел таки дикое решение
Код

Public Sub InsertSelectSets()
Dim sql As String
CurrentDb.Execute "delete * from SelectSets"
Let sql = "INSERT INTO SelectSets ( DateVal, OrderSum, ShippingSum, AutoSelect )"
Let sql = sql & " SELECT ads.DATE, Sum(ads.[Sum-TON]) AS [Sum-Sum-TON], Sum(als.[Sum-VES]) AS [Sum-Sum-VES], True"
Let sql = sql & " FROM (SELECT otfact.DATA, Sum(otfact.VES) AS [Sum-VES] FROM otfact"
Let sql = sql & " GROUP BY otfact.DATA) AS als, (SELECT f_zak.DATE, Sum(f_zak.TON) AS [Sum-TON] FROM f_zak"
Let sql = sql & " GROUP BY f_zak.DATE) AS ads  WHERE ads.Date = [als].[Data] "
Let sql = sql & " GROUP BY ads.DATE, True;"
Debug.Print sql
DoCmd.RunSQL sql, True



--------------------
“...Брали корову рыжую одну, отдавать будем корову рыжую одну, чтобы не нарушать отчетности”
Эдуард Успенский, “Каникулы в Простоквашино”
PM MAIL ICQ   Вверх
bopoha
Дата 22.1.2010, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Цитата(FINANSIST @  20.1.2010,  14:29 Найти цитируемый пост)
В итоге нашел таки дикое решение

Это суровая реальность.

Я нашел такое решение.
Сперва делается инсерт, который создает пустые записи.
А потом идет несколько updtate, в которых нет групповых функций.
Примерно так:
Код

UPDTAE temp_table INNER JOIN temp_table.K_PK = b_prodazha.K_PRODAZHA
SET temp_table.S_CENA_S_NDS = temp_table.S_CENA_S_NDS + b_prodazha.S_CENA_S_NDS
WHERE b_prodazha.D_OPLATA Is Null AND temp_table.K_OPER = 1;


В результате запросы проще и понятней.

Это сообщение отредактировал(а) bopoha - 22.1.2010, 12:25
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.