|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
Здравствуйте! Опять я за советом к знатокам. В бухгалтерской базе есть основная таблица "тУСН17" и подчиненная "тУСН17доплата". "тУСН17" связана с "тУСН17доплата" как один ко многим "тУСН17" содержит столбцы (с которыми надо работать, остальные пропущены): Код Дата Аванс ДатаРеализации Сумма Дата - это дата аванса, ДатаРеализации - дата, когда была проставлена Сумма "тУСН17доплата" содержит столбцы Код КодУСН - связь с Код "тУСН17" ДатаДоплаты СуммаДоплаты Задача такая, надо подсчитать суммы на указанный период по столбцам Аванс, Сумма, СуммаДоплаты, но с учетом проставленных дат для каждого платежа. Т.е. Аванс может быть оплачен 1 января 2017, Сумма (Дата реализации) - 12 февраля, а доплаты в течении длительного времени, 1-я 15 февраля, 2-я 24 апреля.... Если период указан на конец февраля 2017 (указывается в главной форме), то считаться должны лишь числа, даты которых меньше или равны 28 февраля 2017 Трудно объяснить, покажу на примере, вот первая строка в таблице: Аванс: 20000 от 1.01.2017 Сумма: 50000 от 12.02.2017 Доплата1: 2000 от 15.02.2017 Доплата2: 3000 от 24.04.2017 вторая строка: Аванс: 48000 от 27.02.2017 Сумма: 90000 от 11.04.2017 Доплата1: 12000 от 15.04.2017 ... В итоге должно получить следующее: Аванс: 20000 + 48000 = 68000 Сумма: 50000 Доплата: 2000 остальное игнорируется Я долго сидел, пробовал разными способами решить эту задачу. Пришлось использовать два запроса - первый собирает данные, отфильтровывая нужное, а второй уже считает: Первый запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Второй запрос: Код: sql 1. 2. 3. 4.
Но в первом запросе есть засада, он некоторые строки дублирует (подчеркнуто красным на картинке), а именно те, где есть несколько доплат (подчеркнуто зелёным) . Естественно, второй запрос дает неправильный результат. Также пришлось принять меня к записям, где доплат нет вообще (нет записей) - в таких случаях подставлял дату от аванса, а сумма = 0. Подскажите, пожалуйста, что тут можно сделать? Как удалить повторяющиеся суммы? На всякий случай выложил урезанный вариант базы. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 16:56 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
alecko, Нет, не так. У тебя идет проверка по наличию ненулевых значений с строках таблиц. А работать надо с любыми числами. Например, в строке таблицы "тУСН17" может быть только одно число большее нуля, Аванс. Остальные числа могут быть равны нулю. Надо работать с числами даты которых меньше или равны дате в [Forms]![фГлавная]![ДатаПо]. Сейчас пробовал группировать данные по месяцам и сравнивал с <=Format$([Forms]![фГлавная]![ДатаПо];'mmmm yyyy') Получилось слишком длинное выражение, Access 2003 отказался работать с ним. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 19:48 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
alecko, и надо результат получить в одной строке (в идеале) SumАвансов SumСумм SumДоплат - далее будет считаться Остаток (что это такое не знаю, бухгалтерией не владею), будет высчитываться по формуле: Остаток=SumАвансов + SumДоплат - SumСумм. Но это уже просто. Вопрос, как эту таблицу в одну строку свести? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 19:54 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
Alex37, примерно так запрос z11 --слияние на 1 апреля Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Кодns№договораДатаЗаказчикРеализацияДата РеализацииСуммаАвансОплата 100%№счетаdoplata111204-б11.11.2013ООО "Порта плюс222"-115.03.201725000500000,00р.1219.01.20175 000,00р.1216.01.201710 000,00р.21109-н18.03.2017Филюшкина С.Е.022.03.201703000000,00р.31145-б24.03.2017ИП Белов А.А.-128.03.201720001000-11100,00р.3230.03.2017100,00р.3229.03.2017200,00р.3228.03.2017500,00р.341113-б17.03.2017ИП Белов А.А.-122.03.20173455015000-10,00р.34224.03.201719 550,00р.361146-б03.03.2017ООО "Окна плюс"-120.04.2017200001600001360,00р.371147-б03.04.2017ИП Озеров Н.А.-120.04.2017300002000001350,00р.87120002.02.2017ИП "Пупкин"-121.03.20171000004900002000,00р.881222220.04.2017ОООООО-123.04.201710000500000,00р. обічніе итого Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
КодFirst-nsFirst- №договораFirst-ДатаFirst-ЗаказчикFirst- РеализацияFirst-Дата РеализацииFirst-СуммаFirst-АвансFirst-Оплата 100%First-№счетаSum - doplata111204-б11.11.2013ООО "Порта плюс222"-115.03.2017250005000015 000,00р.21109-н18.03.2017Филюшкина С.Е.022.03.201703000000,00р.31145-б24.03.2017ИП Белов А.А.-128.03.201720001000-1110800,00р.341113-б17.03.2017ИП Белов А.А.-122.03.20173455015000-119 550,00р.361146-б03.03.2017ООО "Окна плюс"-120.04.2017200001600001360,00р.371147-б03.04.2017ИП Озеров Н.А.-120.04.2017300002000001350,00р.87120002.02.2017ИП "Пупкин"-121.03.20171000004900002000,00р.881222220.04.2017ОООООО-123.04.201710000500000,00р. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 20:03 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
Alex37, Пример не смотрела. Может, так? Только, какую дату оставлять в выборке, нет указаний, сделала "последнюю подходящую". Запрос1 Код: sql 1. 2. 3. 4. 5. 6. 7.
Запрос2 Код: sql 1. 2. 3. 4. 5.
Итоговый запрос Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 20:08 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
__MichelleAlex37, Пример не смотрела. Может, так? Только, какую дату оставлять в выборке, нет указаний, сделала "последнюю подходящую". Запрос1 Код: sql 1. 2. 3. 4. 5. 6. 7.
Запрос2 Код: sql 1. 2. 3. 4. 5.
Итоговый запрос Код: sql 1. 2.
Дата из главной формы берется, там календарик всплывающий. Я тестирую на дату 28.02.2017 Создал запросы. Проверил на данных. Конечно, не все работает... Например в Запросе2 нет сравнения с датой из главной формы. Но решения оригинальные. Смотрю и удивляюсь на многовариантность решений! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 20:26 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
Alex37Дата из главной формы берется, там календарик всплывающий. Я тестирую на дату 28.02.2017Вопрос не об этой дате. Если в первой таблице несколько Авансов или Реализаций для одного Кода, какую дату брать. Это на суммы не влияет, просто для показа в сводке Alex37Создал запросы. Проверил на данных. Конечно, не все работает... Например в Запросе2 нет сравнения с датой из главной формы. Но решения оригинальные. Смотрю и удивляюсь на многовариантность решений!Это - прошу прощения. Выпало при переписывании. Конечно, так было задумано: Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 20:36 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
Alex37, Если же в первой таблице для каждого Кода всегда не больше одной записи, то Запрос1 можно вообще упростить. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 20:41 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКАAlex37, примерно так запрос z11 --слияние на 1 апреля Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Кодns№договораДатаЗаказчикРеализацияДата РеализацииСуммаАвансОплата 100%№счетаdoplata111204-б11.11.2013ООО "Порта плюс222"-115.03.201725000500000,00р.1219.01.20175 000,00р.1216.01.201710 000,00р.21109-н18.03.2017Филюшкина С.Е.022.03.201703000000,00р.31145-б24.03.2017ИП Белов А.А.-128.03.201720001000-11100,00р.3230.03.2017100,00р.3229.03.2017200,00р.3228.03.2017500,00р.341113-б17.03.2017ИП Белов А.А.-122.03.20173455015000-10,00р.34224.03.201719 550,00р.361146-б03.03.2017ООО "Окна плюс"-120.04.2017200001600001360,00р.371147-б03.04.2017ИП Озеров Н.А.-120.04.2017300002000001350,00р.87120002.02.2017ИП "Пупкин"-121.03.20171000004900002000,00р.881222220.04.2017ОООООО-123.04.201710000500000,00р. обічніе итого Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
КодFirst-nsFirst- №договораFirst-ДатаFirst-ЗаказчикFirst- РеализацияFirst-Дата РеализацииFirst-СуммаFirst-АвансFirst-Оплата 100%First-№счетаSum - doplata111204-б11.11.2013ООО "Порта плюс222"-115.03.2017250005000015 000,00р.21109-н18.03.2017Филюшкина С.Е.022.03.201703000000,00р.31145-б24.03.2017ИП Белов А.А.-128.03.201720001000-1110800,00р.341113-б17.03.2017ИП Белов А.А.-122.03.20173455015000-119 550,00р.361146-б03.03.2017ООО "Окна плюс"-120.04.2017200001600001360,00р.371147-б03.04.2017ИП Озеров Н.А.-120.04.2017300002000001350,00р.87120002.02.2017ИП "Пупкин"-121.03.20171000004900002000,00р.881222220.04.2017ОООООО-123.04.201710000500000,00р. Спасибо. Интересное решение. Возьму идею на вооружение, как подготовка таблиц для дальнейшей обработки. Надо попробовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 20:51 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
__MichelleAlex37, Если же в первой таблице для каждого Кода всегда не больше одной записи, то Запрос1 можно вообще упростить. В том и проблема (для меня), что записей легко может быть больше одной. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 20:55 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
Alex37__MichelleAlex37, Если же в первой таблице для каждого Кода всегда не больше одной записи, то Запрос1 можно вообще упростить. В том и проблема (для меня), что записей легко может быть больше одной.Этот случай как раз уже учтен в вышеприведенном Запрос1. И почему проблема? Рабочий момент. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 21:01 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
__MichelleAlex37Дата из главной формы берется, там календарик всплывающий. Я тестирую на дату 28.02.2017Вопрос не об этой дате. Если в первой таблице несколько Авансов или Реализаций для одного Кода, какую дату брать. Это на суммы не влияет, просто для показа в сводке Alex37Создал запросы. Проверил на данных. Конечно, не все работает... Например в Запросе2 нет сравнения с датой из главной формы. Но решения оригинальные. Смотрю и удивляюсь на многовариантность решений!Это - прошу прощения. Выпало при переписывании. Конечно, так было задумано: Код: sql 1. 2. 3. 4. 5. 6.
Для каждого Кода первой таблицы может быть только по одному Авансу и Реализации. Причем Аванс может быть единственным числом в строке. Да, спасибо. Отсутствие WHERE заметил, добавил. В первом запросе непонятка такая: Код: sql 1.
выдает какое-то число. Количество дней от чего-то там? Но данные отобрал правильно. Запрос2 так же правильно отработал. А вот Итоговый запрос ничего не показывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 21:07 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
Alex37В первом запросе непонятка такая: Код: sql 1.
выдает какое-то число. Количество дней от чего-то там? Но данные отобрал правильно. Запрос2 так же правильно отработал. А вот Итоговый запрос ничего не показывает.Вот опять моя опечатка.((( Стоят тут над душлй.))) Конечно, должно быть Код: sql 1.
Теперь что Итоговый будет показывать? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 21:14 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
Alex37, Еще заметила недочет, вот так надо: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 21:16 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
__MichelleAlex37, Еще заметила недочет, вот так надо: Код: sql 1.
Итоговый запрос ничего не показывает. Может из-за того, что запрос1 выдает 8 строк (причем актуальных там 2, остальные с нулевыми значениями, а запрос2 - всего 2 строки? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 21:23 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
Alex37, Можете показать, что выдают первый и второй запросы? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 21:41 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
__Michelle, Я табличку сделал, какие данные должны попадать в обработку и какой должен быть итог: Код указан для основной таблицы тУСН17. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 21:54 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
Alex37, Понятно. Нет одинаковых Кодов, по которым должна быть связь. Для начала так попробуйте, а потом надо окончательно подправить, чтобы учитывались подобные ситуации. Код: sql 1. 2.
или Код: sql 1. 2.
Сейчас пока отвлекусь, где-то через час-два посмотрю. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 21:59 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
__MichelleAlex37, Понятно. Нет одинаковых Кодов, по которым должна быть связь. Для начала так попробуйте, а потом надо окончательно подправить, чтобы учитывались подобные ситуации. Код: sql 1. 2.
или Код: sql 1. 2.
Сейчас пока отвлекусь, где-то через час-два посмотрю. Вот результаты обоих вариантов: ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 22:29 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
немного код подправил. добавил один запросик. столбцы А1, S1, D1 лишние? ну выкинуть их не составит труда? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 22:37 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
aleckoнемного код подправил. добавил один запросик. столбцы А1, S1, D1 лишние? ну выкинуть их не составит труда? Очень, очень близко к теме!!! Да, столбцы А1, S1, D1 лишние. Но это не проблема. Заметил такую вещь. Например, не все данные видны. Установил дату 31.03.2017 - Нет в списке строки с кодом 2 (а там даты для Аванса и Реализации ??.03.2017) При установленной дате 30.04.2017 этого кода так же нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 23:11 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
alecko, и ещё, установил дату 31.01.2017 - так стали видны ВСЕ записи, кроме строки с кодом=2. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 23:13 |
|
Сложный простой запрос
|
|||
---|---|---|---|
#18+
Alex37, Так, отвлечься оказалось полезно. Новый взгляд возник. Правильно ли я понимаю, что задача состоит в том, чтобы получить три итоговые суммы, не заостряя внимание на причастных к ним Кодах? Тогда и запросов вспомогательных не надо. Все сразу получим одним коротким запросом Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2017, 23:18 |
|
|
start [/forum/topic.php?fid=45&fpage=77&tid=1612499]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
85ms |
get tp. blocked users: |
2ms |
others: | 384ms |
total: | 541ms |
0 / 0 |