Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Связанный подзапрос / 25 сообщений из 28, страница 1 из 2
19.04.2016, 14:32
    #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
19.04.2016, 14:40
    #39219220
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связанный подзапрос
mrmaxim ,

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

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



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

Можно ли в связанном подзапросе найти минимальную цену доставки в пределах одной накладной (накладная№ = накладная№_Temp ) и передать значение в главный запрос и вывести все столбцы * ?
...
Рейтинг: 0 / 0
19.04.2016, 15:04
    #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
19.04.2016, 15:10
    #39219270
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связанный подзапрос
mrmaximКак составить запрос который выведет минимальную стоимость доставки для всех накладных с указанием грузоперевозчиков, в виде следующей таблицы?А если два перевозчика предлагают равную минимальную цену - что выводить?
...
Рейтинг: 0 / 0
19.04.2016, 15:13
    #39219274
Ирина Тихонова
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связанный подзапрос
Akina, Кто раньше предложил, тот и получил!
...
Рейтинг: 0 / 0
19.04.2016, 15:16
    #39219284
mrmaxim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связанный подзапрос
Akina,
Хороший вопрос!
Я рейтингую грузоперевозчиков последующей схеме, кто больше сделает перевозок по минимальной цене тот и победитель.

По хорошему нужно выводить обоих. Но не представляю как. Значит больше шансов у кого имя раньше/позже в списке. :)
...
Рейтинг: 0 / 0
19.04.2016, 15:18
    #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
19.04.2016, 15:34
    #39219305
mrmaxim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связанный подзапрос
mds_world,
Спасибо, работает!

У меня такие же идеи были, но через два запроса,
первым запросом по всему множеству найти все минимумы, а потом через связку двух ключей(накладная номер и сумма )
выбрать из основной таблицы остальные реквизиты
...
Рейтинг: 0 / 0
19.04.2016, 16:26
    #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
19.04.2016, 16:34
    #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
19.04.2016, 17:02
    #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
20.04.2016, 07:09
    #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
20.04.2016, 12:40
    #39220064
mrmaxim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связанный подзапрос
Agapov_stas,
вопрос по id потянул вопрос по "таблице2".

ID нет, так как данные идут из другого запроса с кучей Union по каждому перевозчику (их более 20 ти).
По Notepad++ спрашиваю не из за праздного любопытства. При использовании запросов по подмножеству Dmin и проч . важно контролировать правильность синтаксиса, а именно парное количество различных скобок и кавычек. Встроенный редактор Access не позволяет это делать. Поэтому пользуюсь notepad++.
А вы чем пользуетесь?
...
Рейтинг: 0 / 0
20.04.2016, 12:48
    #39220075
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связанный подзапрос
mrmaximзапроса с кучей Union по каждому перевозчику (их более 20 ти).
Уже интересно...Выложите текст запроса в студию. Полагаю, у Вас неверно спроектирована структура базы данных. Могу ошибаться, но эта фраза смущает.
mrmaximА вы чем пользуетесь?
Все в MS Access.
...
Рейтинг: 0 / 0
20.04.2016, 13:26
    #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
20.04.2016, 13:29
    #39220126
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связанный подзапрос
Не советую использовать Dfunction на больших массивах. Эти функции вызывают выполнение подзапроса на каждую запись исходной таблицы - фактически это просто форма записи коррелированного подзапроса... тормозилово может получиться невероятное.
...
Рейтинг: 0 / 0
20.04.2016, 13:32
    #39220129
mrmaxim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связанный подзапрос
Akina,
это не большой массив. там присутствуют только отправления текущего дня.
...
Рейтинг: 0 / 0
20.04.2016, 13:48
    #39220151
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связанный подзапрос
Тогда пофиг. Но я бы всё одно ратовал за "всеобщий" код, а не за специфичный.
...
Рейтинг: 0 / 0
20.04.2016, 13:49
    #39220154
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связанный подзапрос
mrmaximу каждого перевозчика свой формат представления тарифов на перевозку, поэтому используются разные запросы для вычисления стоимости. Потом эти вопросы объединяются в один.
Не объясняет union, имхо.
mrmaximя не представляю как проверить все знаки препинания в подобном запросе в встроенном редакторе Access
Кому как удобно.

mrmaxim , советую использовать советы mds_world , Akina . Я предложил вариант, а не верное решение (к сожалению).
...
Рейтинг: 0 / 0
20.04.2016, 14:33
    #39220223
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связанный подзапрос
mrmaxim1. у каждого перевозчика свой формат представления тарифов на перевозку, поэтому используются разные запросы для вычисления стоимости.
А почему данные не нормализуются в единый формат ПЕРЕД загрузкой в БД?
...
Рейтинг: 0 / 0
20.04.2016, 16:23
    #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
20.04.2016, 17:09
    #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
20.04.2016, 17:19
    #39220488
mrmaxim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связанный подзапрос
Akina,
приложил файл , как с минимальными ручными преобразованиями получить нормализованную таблицу (без VBA)?
...
Рейтинг: 0 / 0
20.04.2016, 17:47
    #39220511
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связанный подзапрос
mrmaximприложил файл
А пояснения к нему я должен сам придумать?
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Связанный подзапрос / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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