LEADERSOFT.ru Разработка на заказ программ и сайтов
Форумы по информационным технологиям
 
Регистрация  |  Вход
left
Форумы Минимизировать
ПоискСписок форумов
  Программирование  Microsoft Access. Файлы mdb и accdb  Выборка в запро...
 Выборка в запрос нужной цены
 
 16.06.2016 9:06:34
Aleck_b
11 сообщения


Выборка в запрос нужной цены
Здравствуйте.
Вопрос такой: Есть таблица "Изделия" с полями [Код_изделия], [Наименование_изделия], [Шифр] и есть связанная с ней по полю [Код_изделия] таблица "Цены изделий" с полями [Код_изделия], [Дата], [Цена], в которой находятся цены на определенную дату изделий. Нужно получить запрос, в котором будут поля:

[Наименование_изделия], [Шифр], [Дата], [Цена]

причем [Цена] должна выбираться на указанную заранее дату или более раннюю дату, а если на такую дату цены нет, то выдавать цену 0 или ''.

Например: Таблица "Изделия" содержит записи:

1 Коронка 18547
2 Макет 78979
3 Протез 46565

А таблица "Цены изделий" содержит записи:

1 15.01.2014 1000
1 10.07.2015 2000
1 14.03.2016 3000
2 19.09.2015 1500
2 23.11.2016 4000
3 17.03.2014 8500
3 21.02.2015 9100
3 04.04.2016 9800

Если мы задаем дату выборки например 16.06.2016, то запрос должен выдать такой результат:

Коронка 18547 14.03.2016 3000
Макет 78979 19.09.2015 1500
Протез 46565 04.04.2016 9800

Если мы задаем дату выборки например 20.03.2014, то запрос должен выдать такой результат:

Коронка 18547 15.01.2014 1000
Макет 78979 0 (или '')
Протез 46565 17.03.2014 8500

Если мы задаем дату выборки например 10.01.2012, то запрос должен выдать такой результат:

Коронка 18547 0 (или '')
Макет 78979 0 (или '')
Протез 46565 0 (или '')
 16.06.2016 19:46:48
Admin1
731 сообщения
1-ый


Re: Выборка в запрос нужной цены
Есть несколько вариантов решения задачи. Вот алгоритмы.

1. Использовать вторичный запрос. (SELECT TOP 1 * [Цены изделий] Where [Дата] BETWEEN D1 And D2 AND [Код_изделия] = [Изделия].[Код_Изделия]) Этот запрос надо добавить вместо таблицы SELECT * (...) FROM [Изделия]. Для того, чтобы не было пустых строк, в таблицу [Цены изделий] записать цены с периодом 01.01.2000 г. или использовать еще запрос для нулевых цен и UNION для объединения с главный запросом.

2. Использовать функцию DLookup. Она позволяет выбрать одну запись из таблицы, используя фильтр. Если запись возвращает NULL, то надо иcиспользовать NZ для того, чтобы определить 0 или ''

P.S. Лучше использовать мастер для построения запросов. Скорость запроса с DLookup будет медленнее.
  Программирование  Microsoft Access. Файлы mdb и accdb  Выборка в запро...
ПоискПоиск  Список форумовСписок форумов  
right