powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / помогите с запросом
11 сообщений из 11, страница 1 из 1
помогите с запросом
    #39669868
Sergey8969
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день

Подскажите как тут правильно сделать запрос. Мне нужно просуммировать кол-во инструмента в таблицах "Кому_выдан" и "Инструмент_на_списание".
Такой вот запрос работает неправильно:
Код: plsql
1.
2.
3.
SELECT Инструмент.Id_инструмент, Sum(Кому_выдан.кол_во_на_руках) AS [Sum-кол_во_на_руках], Sum(Инструмент_на_списание.кол_во_на_списание) AS [Sum-кол_во_на_списание]
FROM (Инструмент INNER JOIN Инструмент_на_списание ON Инструмент.Id_инструмент = Инструмент_на_списание.id_инструмент) INNER JOIN Кому_выдан ON Инструмент.Id_инструмент = Кому_выдан.Id_инструмент
GROUP BY Инструмент.Id_инструмент


Проблема тут в том, что в случае, когда в таблицах "Кому_выдан" и "Инструмент_на_списание" разное число строк, - сумма получается неверная.
К примеру, в таблице "инструмент" только одна запись: "id_инструмент"=1, в таблице "Кому_выдан" - 2 записи: "Кому_выдан"=1 и 2, в таблице "Инструмент_на_списание" - 1 запись: "Инструмент_на_списание"=3
В результате мой запрос выдает такую таблицу: "id_инструмент"=1; "Sum-кол_во_на_руках"=3; "Sum-кол_во_на_списание"=6, а должно быть "Sum-кол_во_на_списание"=3, но так как в таблице "Кому_выдан" 2 записи, то и в "Инструмент_на_списание" он суммирует 3+3

Подскажите плиз что исправить, чтобы правильно отрабатывало
...
Рейтинг: 0 / 0
помогите с запросом
    #39669886
Прогер_самоучка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey8969Проблема тут в том, что в случае, когда в таблицах "Кому_выдан" и "Инструмент_на_списание" разное число строк, - сумма получается неверная.
К примеру, в таблице "инструмент" только одна запись: "id_инструмент"=1, в таблице "Кому_выдан" - 2 записи: "Кому_выдан"=1 и 2, в таблице "Инструмент_на_списание" - 1 запись: "Инструмент_на_списание"=3
В результате мой запрос выдает такую таблицу: "id_инструмент"=1; "Sum-кол_во_на_руках"=3; "Sum-кол_во_на_списание"=6, а должно быть "Sum-кол_во_на_списание"=3, но так как в таблице "Кому_выдан" 2 записи, то и в "Инструмент_на_списание" он суммирует 3+3пока дочитал, чуть не ополоумел
Просто приведите данные из таблиц: либо тэгом csv, либо скринами.
Или лучше базой сюда, если 2003 access
...
Рейтинг: 0 / 0
помогите с запросом
    #39669905
Sergey8969
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прогер_самоучкапока дочитал, чуть не ополоумел

сори, думал так на пальцах понятно проблему объясню) Прикрепляю пример в БД
...
Рейтинг: 0 / 0
помогите с запросом
    #39669938
Sergey8969
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey8969 Прикрепляю пример в БД

"Sum-кол_во_на_спис" показывает неверное значение в Запросе1. Запрос выдает значение 6, хотя должно быть 3. Он дважды одно и то же значение суммирует.
...
Рейтинг: 0 / 0
помогите с запросом
    #39669945
Прогер_самоучка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey8969Sergey8969 Прикрепляю пример в БД

"Sum-кол_во_на_спис" показывает неверное значение в Запросе1. Запрос выдает значение 6, хотя должно быть 3. Он дважды одно и то же значение суммирует.и правильно делает ;)
Ибо нужно вот так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT Инструмент.id_инструмент, Sum(Кому_выдано.кол_во) AS [Sum-кол_во], [Sum-кол_во_на_спис]
FROM (Инструмент 
INNER JOIN Кому_выдано ON Инструмент.id_инструмент = Кому_выдано.id_инструмент) 
INNER JOIN( SELECT id_инструмент, sum(кол_во_на_спис) as  [Sum-кол_во_на_спис] 
            FROM  на_списание 
            GROUP BY id_инструмент
           )  as  на_списание ON Инструмент.id_инструмент = на_списание.id_инструмент
GROUP BY Инструмент.id_инструмент, [Sum-кол_во_на_спис]
...
Рейтинг: 0 / 0
помогите с запросом
    #39669953
Прогер_самоучка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваша база с обновленным запросом
...
Рейтинг: 0 / 0
помогите с запросом
    #39669965
Sergey8969
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прогер_самоучкаи правильно делает ;)
Ибо нужно вот так

Спасибо! :) Да, теперь как надо работает. Это что-то вроде запроса в запросе получилось? Где можно почитать как такие запросы писать? Мне уже помогали тут с другими запросами примерно такими же методами. Я не совсем понимаю как это работает. Хочется разобраться
...
Рейтинг: 0 / 0
помогите с запросом
    #39669978
Прогер_самоучка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey8969Прогер_самоучкаи правильно делает ;)
Ибо нужно вот так

Спасибо! :) Да, теперь как надо работает. Это что-то вроде запроса в запросе получилось? Где можно почитать как такие запросы писать? Мне уже помогали тут с другими запросами примерно такими же методами. Я не совсем понимаю как это работает. Хочется разобратьсяВы пытаетесь получить сразу агрегатные значения из разных таблиц. Это неправильно. Так не будет работать.
Не, запрос в запросе - это немного другое.
Тут вы просто заранее агрегируете по одному из значений и группируете, и только потом джоинитесь.
...
Рейтинг: 0 / 0
помогите с запросом
    #39669996
Sergey8969
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прогер_самоучкаВы пытаетесь получить сразу агрегатные значения из разных таблиц. Это неправильно. Так не будет работать.


Да я понимаю, что неправильно делал, почему неправильно тоже понятно, просто не знал как отдельно сгруппировать сначала с одной таблицей, потом с другой и вывести результаты в одном запросе.
Я запросы обычно создаю с помощью конструктора запросов в Аксесе. Те запросы, что создает конструктор, я еще понимаю в виде sql кода, а вот когда нужно что-то сложнее сделать - мне не понятно как что работает. Видимо, надо в изучение sql углубляться
...
Рейтинг: 0 / 0
помогите с запросом
    #39670006
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey8969Я запросы обычно создаю с помощью конструктора запросов в Аксесе.я бы подобную задачу решала через union all. примерно так

Код: sql
1.
2.
3.
4.
5.
6.
select  кодИнструмента, наличиеНаНачалоГода, 0 as выдано, 0 as списано from ОСНОВНАЯ
UNION ALL
select кодИнструмента,0, выдано, 0 from ВЫДАЧА ......

UNION ALL
select кодИнструмента,0,0, наСписание from СПИСАНИЕ......



и уже на этот запрос делала итоги
причем все составляющие можно сделать мастером в конструкторе
...
Рейтинг: 0 / 0
помогите с запросом
    #39670048
Sergey8969
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot ПЕНСИОНЕРКА]Sergey8969я бы подобную задачу решала через union all

тоже вариант, но выражение длинное получается. Получилось как-то так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select subquery.id_инструмент, Sum(subquery.на_рук) AS [на_рук2],  sum(subquery.на_спис) as на_спис2
from(
SELECT Инструмент.id_инструмент, Sum(Кому_выдано.кол_во) AS [на_рук],0 as на_спис
FROM Инструмент INNER JOIN Кому_выдано ON Инструмент.id_инструмент = Кому_выдано.id_инструмент
GROUP BY Инструмент.id_инструмент
UNION
SELECT Инструмент.id_инструмент,0, Sum(на_списание.кол_во_на_спис) AS [Sum-кол_во_на_спис]
FROM Инструмент INNER JOIN на_списание ON Инструмент.id_инструмент = на_списание.id_инструмент
GROUP BY Инструмент.id_инструмент) as subquery
GROUP BY subquery.id_инструмент
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / помогите с запросом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]