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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Три последовательных запроса - как упростить? 
:(
    Опции темы
A32
Дата 16.12.2015, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 3.1.2013

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



Проблема не сложная, но решена как-то "коряво".
Есть таблица из четырёх полей: дата, приход, расход, отдел.
Требуется рассчитать разницу прихода и расхода по отделам в заданном интервале дат.
Первый запрос фильтрует данные по дате.
Второй запрос считает сумму Прихода  и сумму Расхода.
Третий запрос считает разницу этих сумм.

Три запроса для такой несложной задачи мне представляются излишними, но самостоятельно упростить не получилось.
PM MAIL   Вверх
ksnk
Дата 17.12.2015, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Эти запросы используются еще в каких - нибудь других запросах? Если используются - лучше не трогать.
Вообще - с чего возникла идея оптимизировать? Тормозит?

А вообще - почитать про групповые операции в msAccess




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
mikeyess
Дата 17.12.2015, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 0
Регистрация: 7.1.2014

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



select Sum(приход) as Prixod, Sum(расход) as Rasxod
from TableName
where (отдел = "номер или название отдела")
and (дата >= "с даты")
and (дата < "по дату + 1")

Prixod и Rasxod будут нужные. если нужно только их разница,
то замените 1 строку на:
select Sum(приход) - Sum(расход) as Raznica
С уважением, Mike


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
Akina
Дата 17.12.2015, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Код

SELECT
  [отдел]
, Sum([приход]) AS Debet
, Sum([расход]) AS Credit
, Debet - Credit AS Saldo
FROM
  [таблица]
WHERE 
  [дата] BETWEEN StartDate AND EndDate
GROUP BY
  [отдел]



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

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


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 3.1.2013

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



Цитата(ksnk @  17.12.2015,  08:05 Найти цитируемый пост)
Вообще - с чего возникла идея оптимизировать? Тормозит?

Нет, не в этом дело. Просто не люблю криво - косо сделанную работу, прежде всего свою.
Поэтому стремлюсь к лаконичности, в этом смысле SQL запросы мне представляются избыточно сложными.
Но проверил оба варианта. Оба работают (спасибо). Но вариант mikeyess  не очень удобен - отдел надо задавать отдел вручную и выводит он только одну строку для этого отдела.
А вариант Akina  простой и изящный. Проблема в том, что я абсолютно не понимаю этот синтаксис.

Упс. Посмотрел на код ещё раз и осенило: это, наверное, надо понимать так:
SELECT  [отдел], Sum([приход]) AS Debet, Sum([расход]) AS Credit, Debet - Credit AS Saldo 

Никогда не ставил запятые в начале строки (привычка фортраниста), вот и не понял.
Но в любом случае, изучать синтаксис SQL для решения простых задач не готов.
Так что ждите в гости.
PM MAIL   Вверх
Akina
Дата 19.12.2015, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(A32 @  19.12.2015,  00:42 Найти цитируемый пост)
Никогда не ставил запятые в начале строки (привычка фортраниста), вот и не понял.

Всего лишь для удобства отладки - комментирование строки начальной парой символов тире (отладочные поля всегда после содержательных).


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

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

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

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

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


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

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


 




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


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

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