Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос с группировкой по нескольким таблицам. Проблема - в поле с суммой, суммирует линее / 7 сообщений из 7, страница 1 из 1
19.07.2017, 18:02
    #39491790
Артём С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой по нескольким таблицам. Проблема - в поле с суммой, суммирует линее
Рад приветствовать всех на этом форуме! Я тут новичок, так что заранее извиняюсь если что-то не так объясню :)
В приложенном примере несколько таблиц (журналов учета поступления трубы и того что с ней дальше делали). Уникальный признак (ключ) для всех таблиц является "№ трубы". Когда делаю сводную таблицу (запрос) в которой мне нужен общий перечень номеров труб (уникальных!), в поле, где я бы хотел чтобы суммировалась длина, которая попала в таблицу "монтаж", по этим трубам суммируется больше чем нужно, ТОЛЬКО по тем трубам, которые есть в журнале резки. И количество резов тоже считается в 2 раза больше чем нужно...
В конструкторе запросов поставил условие ">13" на то злосчастное поле с суммой для наглядности, это те трубы на которых длина посчиталась больше чем нужно.
Очень прошу помощи в решении этой проблемы. Буду очень признателен =)
...
Рейтинг: 0 / 0
19.07.2017, 18:22
    #39491800
Артём С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой по нескольким таблицам. Проблема - в поле с суммой, суммирует линее
На сколько я понимаю это решается подзапросом, но всё никак их не освою...
...
Рейтинг: 0 / 0
20.07.2017, 09:38
    #39492051
Запрос с группировкой по нескольким таблицам. Проблема - в поле с суммой, суммирует линее
Артём С.На сколько я понимаю это решается подзапросом, но всё никак их не освою... Для начала создайте дополнительный запрос, возвращающий суммарную длину каждой трубы (допустим "Запрос2"), а в основном запросе используйте его вместо табл. "монтаж".
Т.е. вместо:
SELECT Sum(монтаж.Длина), ...
FROM монтаж...
пишете
SELECT First(Запрос2.Длина),...
FROM Запрос2...

Затем копируете SQL из Запрос2 (без завершающего ";") и вставляете в основной запрос так:
FROM (SELECT...) As Запрос2...

После этого Запрос2 можно удалить из БД.
...
Рейтинг: 0 / 0
20.07.2017, 10:18
    #39492093
Артём С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой по нескольким таблицам. Проблема - в поле с суммой, суммирует линее
Анатолий, спасибо! Я почти у цели, с дополнительным запросом всё работает, но когда делаю подзапрос, выдаёт ошибку синтаксиса FROM.... Если вас не затруднит, скажите в чем тут моя ошибка?

SELECT Труба.Дата_поступления, Труба.Место_отправки, Труба.Подряд, Труба.[Акт ВК], Труба.[№_трубы], Труба.Длина, Труба.Диаметр, Труба.Стенка, Труба.Тоннаж, Труба.Паспорт, Труба.Завод, ГО.[№_отвода], ГО.Градус,
БТС.[№_плети], Вывоз.Дата AS [Дата вывоза], Count(Резка.Дата) AS [Count-Дата], Запрос1.[Min-Дата_сварки], Запрос1.[Sum-Длина]
FROM (SELECT Min(Монтаж.Дата_сварки) AS [Min-Дата_сварки], Монтаж.[№_трубы], Sum(Монтаж.Длина) AS [Длина]
FROM Труба INNER JOIN Монтаж ON Труба.[№_трубы] = Монтаж.[№_трубы]
GROUP BY Монтаж.[№_трубы]) AS Запрос1
(((((Труба LEFT JOIN Вывоз ON Труба.[№_трубы] = Вывоз.[№_трубы])
LEFT JOIN БТС ON Труба.[№_трубы] = БТС.[№_трубы])
LEFT JOIN ГО ON Труба.[№_трубы] = ГО.[№_трубы])
LEFT JOIN Монтаж ON Труба.[№_трубы] = Монтаж.[№_трубы])
LEFT JOIN Резка ON Труба.[№_трубы] = Резка.[№_трубы])
LEFT JOIN Запрос1 ON Труба.[№_трубы] = Запрос1.[№_трубы]
GROUP BY Труба.Дата_поступления, Труба.Место_отправки, Труба.Подряд, Труба.[Акт ВК], Труба.[№_трубы], Труба.Длина, Труба.Диаметр, Труба.Стенка, Труба.Тоннаж, Труба.Паспорт, Труба.Завод, ГО.[№_отвода], ГО.Градус, БТС.[№_плети], Вывоз.Дата, Запрос1.[Min-Дата_сварки], Запрос1.[Sum-Длина]
ORDER BY Труба.Дата_поступления DESC , Труба.Стенка;
...
Рейтинг: 0 / 0
20.07.2017, 10:56
    #39492136
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой по нескольким таблицам. Проблема - в поле с суммой, суммирует линее
Артём С.,

сначала создаете Запрос1
Код: sql
1.
2.
3.
4.
5.
SELECT Min(Монтаж.Дата_сварки) AS [Min-Дата_сварки], Монтаж.[№_трубы],
 Sum(Монтаж.Длина) AS [sum-Длина]
FROM Труба  INNER JOIN Монтаж
 ON Труба.[№_трубы] = Монтаж.[№_трубы]
GROUP BY Монтаж.[№_трубы];




прицепляете Запрос1 к основному
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SELECT Труба.Дата_поступления, Труба.Место_отправки, Труба.Подряд, Труба.[Акт ВК], Труба.[№_трубы], 
 Труба.Длина, Труба.Диаметр, Труба.Стенка, Труба.Тоннаж, Труба.Паспорт, Труба.Завод, ГО.[№_отвода], 
 ГО.Градус, БТС.[№_плети], Вывоз.Дата AS [Дата вывоза], Count(Резка.Дата) AS [Count-Дата], Запрос1.[Min-
 Дата_сварки], Запрос1.[Sum-Длина]
 FROM (((((Труба
 LEFT JOIN Вывоз ON Труба.[№_трубы] = Вывоз.[№_трубы])
 LEFT JOIN БТС ON  Труба.[№_трубы] = БТС.[№_трубы])
 LEFT JOIN ГО ON Труба.[№_трубы] = ГО.[№_трубы])
 LEFT JOIN  Монтаж ON Труба.[№_трубы] = Монтаж.[№_трубы])
 LEFT JOIN Резка ON Труба.[№_трубы] =  Резка.[№_трубы])

 LEFT JOIN Запрос1 ON Труба.[№_трубы] = Запрос1.[№_трубы]

 GROUP BY Труба.Дата_поступления, Труба.Место_отправки, Труба.Подряд, Труба.[Акт ВК], Труба.[№_трубы],
  Труба.Длина, Труба.Диаметр, Труба.Стенка, Труба.Тоннаж, Труба.Паспорт, Труба.Завод, ГО.[№_отвода], 
 ГО.Градус, БТС.[№_плети], Вывоз.Дата, Запрос1.[Min-Дата_сварки], Запрос1.[Sum-Длина]
 ORDER BY Труба.Дата_поступления DESC , Труба.Стенка;



затем, если захотите
Код: sql
1.
LEFT JOIN Запрос1 ON Труба.[№_трубы] = Запрос1.[№_трубы]



перепишите на
Код: sql
1.
2.
3.
4.
5.
6.
LEFT JOIN (SELECT Min(Монтаж.Дата_сварки) AS [Min-Дата_сварки], Монтаж.[№_трубы],
 Sum(Монтаж.Длина) AS [sum-Длина]
FROM Труба  INNER JOIN Монтаж
 ON Труба.[№_трубы] = Монтаж.[№_трубы]
GROUP BY Монтаж.[№_трубы];
) as Запрос1 ON Труба.[№_трубы] = Запрос1.[№_трубы]
...
Рейтинг: 0 / 0
20.07.2017, 11:06
    #39492155
Артём С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой по нескольким таблицам. Проблема - в поле с суммой, суммирует линее
Всё получилось! Всё работает в итоге получился код:

SELECT Труба.Дата_поступления, Труба.Место_отправки, Труба.Подряд, Труба.[Акт ВК], Труба.[№_трубы], Труба.Длина, Труба.Диаметр, Труба.Стенка, Труба.Тоннаж, Труба.Паспорт, Труба.Завод, ГО.[№_отвода], ГО.Градус, БТС.[№_плети], Вывоз.Дата AS [Дата вывоза], Count(Резка.Дата) AS [Count-Дата], Запрос1.[Min-Дата_сварки], Запрос1.[Sum-Длина]

FROM (((((Труба LEFT JOIN Вывоз ON Труба.[№_трубы] = Вывоз.[№_трубы])
LEFT JOIN БТС ON Труба.[№_трубы] = БТС.[№_трубы])
LEFT JOIN ГО ON Труба.[№_трубы] = ГО.[№_трубы])
LEFT JOIN Монтаж ON Труба.[№_трубы] = Монтаж.[№_трубы])
LEFT JOIN Резка ON Труба.[№_трубы] = Резка.[№_трубы])

LEFT JOIN (SELECT Min(Монтаж.Дата_сварки) AS [Min-Дата_сварки], Монтаж.[№_трубы], Sum(Монтаж.Длина) AS [Sum-Длина]
FROM Труба INNER JOIN Монтаж ON Труба.[№_трубы] = Монтаж.[№_трубы]
GROUP BY Монтаж.[№_трубы]) AS Запрос1 ON Труба.[№_трубы] = Запрос1.[№_трубы]

GROUP BY Труба.Дата_поступления, Труба.Место_отправки, Труба.Подряд, Труба.[Акт ВК], Труба.[№_трубы], Труба.Длина, Труба.Диаметр, Труба.Стенка, Труба.Тоннаж, Труба.Паспорт, Труба.Завод, ГО.[№_отвода], ГО.Градус, БТС.[№_плети], Вывоз.Дата, Запрос1.[Min-Дата_сварки], Запрос1.[Sum-Длина]
ORDER BY Труба.Дата_поступления DESC , Труба.Стенка;


Спасибо за помощь и потраченное на меня время! Вы все очень помогли! :) Удачи!
...
Рейтинг: 0 / 0
20.07.2017, 11:15
    #39492166
Артём С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с группировкой по нескольким таблицам. Проблема - в поле с суммой, суммирует линее
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT Труба.Дата_поступления, Труба.Место_отправки, Труба.Подряд, Труба.[Акт ВК], Труба.[№_трубы], Труба.Длина, Труба.Диаметр, Труба.Стенка, Труба.Тоннаж, Труба.Паспорт, Труба.Завод, ГО.[№_отвода], ГО.Градус, БТС.[№_плети], Вывоз.Дата AS [Дата вывоза], Count(Резка.Дата) AS [Count-Дата], Запрос1.[Min-Дата_сварки], Запрос1.[Sum-Длина]

FROM (((((Труба LEFT JOIN Вывоз ON Труба.[№_трубы] = Вывоз.[№_трубы])
LEFT JOIN БТС ON Труба.[№_трубы] = БТС.[№_трубы])
LEFT JOIN ГО ON Труба.[№_трубы] = ГО.[№_трубы])
LEFT JOIN Монтаж ON Труба.[№_трубы] = Монтаж.[№_трубы])
LEFT JOIN Резка ON Труба.[№_трубы] = Резка.[№_трубы])

LEFT JOIN (SELECT Min(Монтаж.Дата_сварки) AS [Min-Дата_сварки], Монтаж.[№_трубы], Sum(Монтаж.Длина) AS [Sum-Длина]
FROM Труба INNER JOIN Монтаж ON Труба.[№_трубы] = Монтаж.[№_трубы]
GROUP BY Монтаж.[№_трубы]) AS Запрос1 ON Труба.[№_трубы] = Запрос1.[№_трубы]

GROUP BY Труба.Дата_поступления, Труба.Место_отправки, Труба.Подряд, Труба.[Акт ВК], Труба.[№_трубы], Труба.Длина, Труба.Диаметр, Труба.Стенка, Труба.Тоннаж, Труба.Паспорт, Труба.Завод, ГО.[№_отвода], ГО.Градус, БТС.[№_плети], Вывоз.Дата, Запрос1.[Min-Дата_сварки], Запрос1.[Sum-Длина]
ORDER BY Труба.Дата_поступления DESC , Труба.Стенка;
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос с группировкой по нескольким таблицам. Проблема - в поле с суммой, суммирует линее / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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