Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/16: Рейтинг темы: голосов - 16, средняя оценка - 4.50
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 35
1

Выборка стоимости по вхождению в интервал дат

28.04.2012, 22:52. Показов 3084. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. В очередной раз обращаюсь к гуру за помощью. Что то сам ни как не соображу. Вобщем проблема такая: есть таблица с ценами материалов. в ней поля - "id"; "цена"; "дата_начала"; "дата_окончания" (имеется ввиду действие цены); логическое поле "закрыт". В другой таблице хранятся данные о количестве материалов (разных): "id"; "id_материала"; "количество"; "дата_поступления". Как прописать в запросе, чтобы при расчете суммы по конкретному материалу использовалась цена, действовавшая на дату поступления материала? Заранее благодарю!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2012, 22:52
Ответы с готовыми решениями:

Интервал дат
Добрый день, Сначало года, первый месяц считается как 4 недели, второй месяц считается...

Интервал двух дат
Всем привет, очень нужна помощь помогите пожалуйста. Стоит MS Access 2010 надо сделать запрос на...

Как в отчет добавить интервал дат?
Как в отчет добавить интервал дат?? можно ли это вобще сделать в Access 2007?? Хелп народ, нужна...

Вычисляемое поле в Access: интервал двух дат
Приветствую.. Подскажите пожалуйста.. Проблема вот в чем. У меня в таблицах указанна дата...

13
Эксперт MS Access
26815 / 14494 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
28.04.2012, 23:27 2
SQL
1
2
3
SELECT t.*, tc.цена
FROM [Другая таблица] t INNER JOIN [Таблица с ценами] tc ON (t.[Дата_поступления] 
BETWEEN tc.[дата_начала] AND tc.[дата_окончания])
1
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 35
29.04.2012, 00:18  [ТС] 3
Цитата Сообщение от mobile Посмотреть сообщение
SQL
1
2
3
SELECT t.*, tc.цена
FROM [Другая таблица] t INNER JOIN [Таблица с ценами] tc ON (t.[Дата_поступления] 
BETWEEN tc.[дата_начала] AND tc.[дата_окончания])
Что-то не работает. При запуске выводит окна для введения дат, а затем открывает пустой запрос
0
Эксперт MS Access
26815 / 14494 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
29.04.2012, 00:39 4
Окна ввода параметров запроса выводятся, когда компилятор не находит имена полей из списка полей таблиц/запросов. Ошибка в этом, подставьте правильные имена в запрос.
1
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 35
29.04.2012, 22:45  [ТС] 5
Цитата Сообщение от mobile Посмотреть сообщение
Окна ввода параметров запроса выводятся, когда компилятор не находит имена полей из списка полей таблиц/запросов. Ошибка в этом, подставьте правильные имена в запрос.
Спасибо, буду разбираться. Одна просьба. Не могли бы вы растолковать начинающему, что в выражении обозначают t и с. Или порекомендовать где можно об этом почитать? Заранее благодарю.
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
30.04.2012, 00:40 6
Цитата Сообщение от diverbs Посмотреть сообщение
... что в выражении обозначают t и с. Или порекомендовать где можно об этом почитать?
См. в справке свойство «Псевдоним» (Alias).

Предложенный вам запрос будет работать некорректно. Для того, чтобы создать корректный запрос необходимо, чтобы в таблице с ценами присутствовало поле , содержащее id_материала. Тогда запрос будет таков
T-SQL
1
2
3
SELECT t.*, tc.цена
FROM [Другая таблица] t INNER JOIN [Таблица с ценами] tc ON (t.id_материала=tc.id_материала) 
     And (t.[Дата_поступления] BETWEEN tc.[дата_начала] AND tc.[дата_окончания])
Теперь для каждой записи [Другая таблица] будет найдена соответствующая единственная цена, если конечно для каждого отдельно взятого материала периоды [дата_начала],[дата_окончания] не пересекаются и для каждой [дата_поступления] материала существует период [дата_начала],[дата_окончания] этого материала, которому принадлежит дата поступления.

Добавлено через 20 минут
И еще, очевидно, что [дата_окончания] для действующей на данный момент цены будет не заполнена (Null). В этом случае
tc.[дата_окончания] в запросе нужно заменить на
T-SQL
1
Nz(tc.[дата_окончания], Date())
а лучше на
T-SQL
1
IIf(tc.[дата_окончания] Is Null, Date(), tc.[дата_окончания])
1
Эксперт MS Access
26815 / 14494 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
30.04.2012, 11:50 7
Цитата Сообщение от minob Посмотреть сообщение
Предложенный вам запрос будет работать некорректно.
Не могу не согласиться. В слабое оправдание себе, должен сказать, что я хотел показать топикстартеру принципы работы с интервалами с помощью дополнительной таблицы, содержащей границы интервалов.
0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 35
01.05.2012, 23:41  [ТС] 8
Доброго времени суток.
Написал такой код:
SQL
1
2
3
SELECT t.*, tc.opt
FROM [prihod_dop_material] t INNER JOIN [ceny_dop_materialov] tc ON (t.id_naimen_mater=tc.id_naimen_mater) 
AND (t.[data_postuplen] BETWEEN tc.[date_nachala] AND IIf(tc.[date_okonchan] IS NULL, DATE(), tc.[date_okonchan])
При попытке сохранения акс выдает сообщение: "ошибка синтаксиса в операции JOIN. В чем я ошибся? Подскажите, если не трудно.
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
02.05.2012, 00:03 9
Цитата Сообщение от diverbs Посмотреть сообщение
В чем я ошибся?
Не совпадает количество открытых с количеством закрытых круглых скобок.
Поместите в конце запроса еще одну закрывающую скобку.
0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 35
02.05.2012, 23:51  [ТС] 10
Цитата Сообщение от minob Посмотреть сообщение
Не совпадает количество открытых с количеством закрытых круглых скобок.
Поместите в конце запроса еще одну закрывающую скобку.
Еще раз обращаюсь за помощью. Понадобилось добавить в запрос поле из третьей таблицы. Написал код вроде бы все в соответствии с примером из встроенной справки. Но акс пишет: "ошибка синтаксиса в предложении FROM". Измучал комп, но ошибку не нахожу.
SQL
1
2
3
4
5
SELECT t.id_dop_material, tn.naimenovanie, t.kolichestvo, tc.opt*t.kolichestvo AS Сумма
FROM prihod_dop_material AS t INNER JOIN 
(naimen_dop_material AS tn INNER JOIN [(]ceny_dop_materialov AS tc)]
ON (t.data_postuplenij BETWEEN tc.date_nachala AND IIf(tc.date_okonchanij IS NULL,DATE(),tc.date_okonchanij)) AND (t.id_dop_material=tc.id_naimen_mater))
ON tn.id=t.id_dop_material;
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
03.05.2012, 00:44 11
Цитата Сообщение от diverbs Посмотреть сообщение
Понадобилось добавить в запрос поле из третьей таблицы. Написал код вроде бы все в соответствии с примером из встроенной справки.
Насчет справки не верю. Пробуйте так
T-SQL
1
2
3
SELECT t.id_dop_material, tn.naimenovanie, t.kolichestvo, tc.opt*t.kolichestvo AS Сумма
FROM (prihod_dop_material AS t INNER JOIN naimen_dop_material AS tn ON tn.id=t.id_dop_material) 
INNER JOIN ceny_dop_materialov AS tc ON (t.data_postuplenij BETWEEN tc.date_nachala AND IIf(tc.date_okonchanij IS NULL,DATE(),tc.date_okonchanij)) AND (t.id_dop_material=tc.id_naimen_mater)
0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 35
03.05.2012, 00:53  [ТС] 12
Цитата Сообщение от minob Посмотреть сообщение
Насчет справки не верю.
Выдержка из справки:
SQL
1
2
3
4
5
6
7
SELECT поля
FROM таблица1 INNER JOIN
(таблица2 INNER JOIN [( ]таблица3
[INNER JOIN [( ]таблицаX [INNER JOIN ...)] 
ON таблица3.поле3 оператор_сравнения таблицаX.полеX)]
ON таблица2.поле2 оператор_сравнения таблица3.поле3) 
ON таблица1.поле1 оператор_сравнения таблица2.поле2
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
03.05.2012, 06:59 13
Цитата Сообщение от diverbs Посмотреть сообщение
Выдержка из справки
Чтобы грамотно читать синтаксические конструкции справки и не писать галиматью в коде, ознакомьтесь как-нибудь на досуге с формами Бэкуса-Наура, например, азы здесь.
1
alvk
03.05.2012, 07:16     Выборка стоимости по вхождению в интервал дат
  #14

Не по теме:

Улыбнуло.:D

0
03.05.2012, 07:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.05.2012, 07:16
Помогаю со студенческими работами здесь

Выборка дат
Здравствуйте, есть две проблемы в базе данных, с которыми я не смог разобраться: В форме "продажа...

Выборка по интервалу дат
Здравствуйте. Копаюсь по интернету уже несколько дней, не могу найти ответ. Есть таблица по...

Выборка по диапазону дат
Здравствуйте! У меня возник вопрос и на сайте ответа я по поиску не нашла. Т.к. тут есть...

Выборка диапазона дат в SQLLite
Имеется таблица с некоторым количеством столбцов с данными и одним столбцом с датой, хранимой в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru