powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Связанный подзапрос
25 сообщений из 28, страница 1 из 2
Связанный подзапрос
    #39219198
mrmaxim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опять взываю к помощи .

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

накладная№ первозчик цена12 перевозчик_а 128р.12 перевозчик_б 135р.12 перевозчик_с 125р.18 перевозчик_а 255р18 перевозчик_б 312р.18 перевозчик_с 270р.23 перевозчик_а Null23 перевозчик_б 500р.23 перевозчик_с Null.........

Как составить запрос который выведет минимальную стоимость доставки для всех накладных с указанием грузоперевозчиков, в виде следующей таблицы?

накладная№ первозчик цена12 перевозчик_с 125р.18 перевозчик_а 255р.23 перевозчик_б 500р...........

Спасибо!
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39219220
Agapov_stas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrmaxim ,

Код: sql
1.
2.
3.
SELECT накладная№, first(первозчик), min(Nz(цена,0))
FROM ....
GROUP BY накладная№
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39219244
mrmaxim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо ! Agapov_stas mrmaxim ,

Код: sql
1.
2.
3.
SELECT накладная№, first(первозчик), min(Nz(цена,0))
FROM ....
GROUP BY накладная№



Но тогда надо вначале необходимо таблицу с данными отсортировать по возрастающей.
В противном случае first возращает первого перевозчика из множества группировки по накладной (а он не всегда минимальный).

Можно ли в связанном подзапросе найти минимальную цену доставки в пределах одной накладной (накладная№ = накладная№_Temp ) и передать значение в главный запрос и вывести все столбцы * ?
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39219257
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
SELECT Таблица.накладная№, перевозчик, z.mn as МинЦена
FROM Таблица Inner join (select накладная№, min(цена) as mn from Таблица group by накладная№) z
on Таблица.накладная№=z.накладная№ and Таблица.Цена=z.mn
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39219270
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrmaximКак составить запрос который выведет минимальную стоимость доставки для всех накладных с указанием грузоперевозчиков, в виде следующей таблицы?А если два перевозчика предлагают равную минимальную цену - что выводить?
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39219274
Фотография Ирина Тихонова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, Кто раньше предложил, тот и получил!
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39219284
mrmaxim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Хороший вопрос!
Я рейтингую грузоперевозчиков последующей схеме, кто больше сделает перевозок по минимальной цене тот и победитель.

По хорошему нужно выводить обоих. Но не представляю как. Значит больше шансов у кого имя раньше/позже в списке. :)
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39219286
Agapov_stas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrmaxim ,
Как вариант:
Код: sql
1.
2.
3.
SELECT *
FROM Таблица2
WHERE id=DFirst("id","Таблица2","Nz(Цена,0)=" & DMin("Nz(Цена,0)","Таблица2","накладная№=" & Таблица2!накладная№));
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39219305
mrmaxim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mds_world,
Спасибо, работает!

У меня такие же идеи были, но через два запроса,
первым запросом по всему множеству найти все минимумы, а потом через связку двух ключей(накладная номер и сумма )
выбрать из основной таблицы остальные реквизиты
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39219366
mrmaxim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Agapov_stas mrmaxim ,
Как вариант:
Код: sql
1.
2.
3.
SELECT *
FROM Таблица2
WHERE id=DFirst("id","Таблица2","Nz(Цена,0)=" & DMin("Nz(Цена,0)","Таблица2","накладная№=" & Таблица2!накладная№));



Стас, не могу понять что за "Таблица2" и "id"?
Вы запросы в Notepad++ пишете?
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39219379
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrmaximчерез два запроса, первым запросом по всему множеству найти все минимумы, а потом через связку двух ключей(накладная номер и сумма) выбрать из основной таблицы остальные реквизиты
Ну всё это вполне реализуется в одном запросе.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT t1.*
FROM [Таблица] AS t1,
(
    SELECT t2.[накладная№], MIN(t2.[цена]) AS [цена]
    FROM [Таблица] AS t2
    GROUP BY t2.[накладная№]
) AS t3
WHERE t1.[накладная№] = t3.[накладная№]
  AND t1.[цена] = t3.[цена]
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39219421
mrmaxim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinamrmaximчерез два запроса, первым запросом по всему множеству найти все минимумы, а потом через связку двух ключей(накладная номер и сумма) выбрать из основной таблицы остальные реквизиты
Ну всё это вполне реализуется в одном запросе.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT t1.*
FROM [Таблица] AS t1,
(
    SELECT t2.[накладная№], MIN(t2.[цена]) AS [цена]
    FROM [Таблица] AS t2
    GROUP BY t2.[накладная№]
) AS t3
WHERE t1.[накладная№] = t3.[накладная№]
  AND t1.[цена] = t3.[цена]



Akina, спасибо , именно такой вложенный связанный запрос я и хотел реализовать
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39219727
Agapov_stas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrmaximAgapov_stas mrmaxim ,
Как вариант:
Код: sql
1.
2.
3.
SELECT *
FROM Таблица2
WHERE id=DFirst("id","Таблица2","Nz(Цена,0)=" & DMin("Nz(Цена,0)","Таблица2","накладная№=" & Таблица2!накладная№));



Стас, не могу понять что за "Таблица2" и "id"?
Вы запросы в Notepad++ пишете?
Таблица2 - у себя проверял/тестировал, потому и название таблицы, какое было такое и использовал. Название таблицы естественно Ваше(можно было бы и догадаться самому)
id - уникальный идентификатор, код/счетчик последовательной нумерации, должен быть в Вашей таблице(нету?тогда в любом случае нужно обзавестись им)
По поводу Notepad++ , - с чего Вы взяли, что я в нем пишу?Это где-то отражается в моем тексте?
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39220064
mrmaxim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Agapov_stas,
вопрос по id потянул вопрос по "таблице2".

ID нет, так как данные идут из другого запроса с кучей Union по каждому перевозчику (их более 20 ти).
По Notepad++ спрашиваю не из за праздного любопытства. При использовании запросов по подмножеству Dmin и проч . важно контролировать правильность синтаксиса, а именно парное количество различных скобок и кавычек. Встроенный редактор Access не позволяет это делать. Поэтому пользуюсь notepad++.
А вы чем пользуетесь?
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39220075
Agapov_stas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrmaximзапроса с кучей Union по каждому перевозчику (их более 20 ти).
Уже интересно...Выложите текст запроса в студию. Полагаю, у Вас неверно спроектирована структура базы данных. Могу ошибаться, но эта фраза смущает.
mrmaximА вы чем пользуетесь?
Все в MS Access.
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39220119
mrmaxim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Agapov_stas,

1. у каждого перевозчика свой формат представления тарифов на перевозку, поэтому используются разные запросы для вычисления стоимости. Потом эти вопросы объединяются в один.


2. я не представляю как проверить все знаки припинания в подобном запросе в встроенном редакторе Access

Код: sql
1.
2.
UPDATE Otchet_import SET Otchet_import.ship_id = DMin("id","Otchet_import","Town='" & [Otchet_import].[Town] & "' and Carrier='" & [Otchet_import].[Carrier] & "' and Format(data,'DDMMYYYY')='" & 
Format([Otchet_import].[data],'ddmmyyyy') & "' and tariff='" & [Otchet_import].[tariff] & "'");
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39220126
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не советую использовать Dfunction на больших массивах. Эти функции вызывают выполнение подзапроса на каждую запись исходной таблицы - фактически это просто форма записи коррелированного подзапроса... тормозилово может получиться невероятное.
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39220129
mrmaxim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
это не большой массив. там присутствуют только отправления текущего дня.
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39220151
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда пофиг. Но я бы всё одно ратовал за "всеобщий" код, а не за специфичный.
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39220154
Agapov_stas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrmaximу каждого перевозчика свой формат представления тарифов на перевозку, поэтому используются разные запросы для вычисления стоимости. Потом эти вопросы объединяются в один.
Не объясняет union, имхо.
mrmaximя не представляю как проверить все знаки препинания в подобном запросе в встроенном редакторе Access
Кому как удобно.

mrmaxim , советую использовать советы mds_world , Akina . Я предложил вариант, а не верное решение (к сожалению).
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39220223
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrmaxim1. у каждого перевозчика свой формат представления тарифов на перевозку, поэтому используются разные запросы для вычисления стоимости.
А почему данные не нормализуются в единый формат ПЕРЕД загрузкой в БД?
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39220414
mrmaxim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

конечно можно было , но много возьни в Excel, даже с Power Query.
Плюс идет регулярное обновление их тарифов, а полностью переход к нормализированному виду без ручных корректировок я не представляю как сделать. Если только ячейки в excell не обрабатывать в VBA.
Например DHL у них все тарифы указаны от 0,5кг до 20 кг с шагом 0,5 с указанием тарифа для каждого веса (40 строк), далее для весов от 20 до 30 дана базовая ставка в 20 кг плюс довесок за каждые 0.5 кг . И так еще 3 диапазона до 250 кг.
Если есть желание поломать голову могу прислать excell таблицу.

Другие сразу вводят фиксированную часть и переменную для определенных пределов. Кто то округляет сразу до 1 кг, кто то до 0,5 кто то до 3х знаков после запятой.
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39220476
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrmaximНапример DHL у них все тарифы указаны от 0,5кг до 20 кг с шагом 0,5 с указанием тарифа для каждого веса (40 строк), далее для весов от 20 до 30 дана базовая ставка в 20 кг плюс довесок за каждые 0.5 кг . И так еще 3 диапазона до 250 кг.
Если есть желание поломать голову могу прислать excell таблицу.
Мы уже где-то обсуждали вопрос, как хранить эту хрень, помнится...

mrmaximДругие сразу вводят фиксированную часть и переменную для определенных пределов. Кто то округляет сразу до 1 кг, кто то до 0,5 кто то до 3х знаков после запятой.
Ну не вижу проблемы. Всё это ложится в простую схему база - тариф за базу - тариф за превышение. Для упрощения базу можно развернуть в диапазон от-до. Если все работают с разными точностями - добавить поле точности, используемое как параметр для Round, непосредственно или условное. Уж в самом крайнем случае написать ПФ, которая примет все параметры груза и вернёт стоимость для указанного "ишака".
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39220488
mrmaxim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
приложил файл , как с минимальными ручными преобразованиями получить нормализованную таблицу (без VBA)?
...
Рейтинг: 0 / 0
Связанный подзапрос
    #39220511
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrmaximприложил файл
А пояснения к нему я должен сам придумать?
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Связанный подзапрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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