|
|
|
Supreme Being
      
участник
Last Login: 01.01.2007 16:58
Сообщ.: 725,
Visits: 8 102
|
|
Прошу помощи в таком вопросе:
В течение определенного периода действуют различные цены. Например С: Дата1 «Цена1», Дата2 «Цена2», Дата3 «Цена3» Дата4 «Цена4» Дата5 «Цена5»
В настоящее время я «ЦенаРасч» нахожу вот так.
IIf([Zaiavky]![DataZak]>=[Дата1] And [Zaiavky]![DataZak]<[Дата2],[Цена]![Цена1],IIf([Zaiavky]![DataZak]>=[Дата2] And [Zaiavky]![DataZak]<[Дата3],[Цена]![Цена2],IIf([Zaiavky]![DataZak]>=[Дата3] And [Zaiavky]![DataZak]<[Дата4],[Цена]![Цена3],IIf([Zaiavky]![DataZak]>=[Дата4] And [Zaiavky]![DataZak]<[Дата5],[Цена]![Цена4],[Цена]![Цена5])))) AS ЦенаРасч,
1. Можно ли это же выполнить иначе, чтобы объем запроса уменьшить . 2. И можно ли здесь использовать IF ELSE, если можно, то пожалуйста как. У меня не получается, возможно объем в этом случае будет не меньше, но более прозрачная читаемость будет, при большом количестве изменений цен.
Благодарю.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 23.05.2008 14:52
Сообщ.: 884,
Visits: 9 728
|
|
Используйте ф-ю Switch (советую в качестве последнего условия поставить TRUE, ВашеЗначениеПоУмолчанию) чтобы избежать возможного значения NULL Удачи
|
|
|
|
|
Supreme Being
      
участник
Last Login: 13.03.2008 11:35
Сообщ.: 839,
Visits: 8 738
|
|
Функция Switch работает со списком выражений (нужно писать константы вручную) и для сохранённого запроса, основанного на таблице "Дата-Цена", не применима... А почему бы не использовать функцию Between (тем более, что Светочка с ней работает)?
|
|
|
|
|
Supreme Being
      
участник
Last Login: 01.01.2007 16:58
Сообщ.: 725,
Visits: 8 102
|
|
Ребята, благодарю.
А как можно использовать Between?
У меня, когда я стаю на любую запись в подчиненной форме,благодаря этому запросу, в зависимости от "ДатаХ" в этой строке, в главной форме отображается стоимость услуги для выбранного абонента, с учетом % его льготы.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 13.03.2008 11:35
Сообщ.: 839,
Visits: 8 738
|
|
Подразумевалось, что всё Ваше длинное условие можно сократить до выражения типа
SELECT ... WHERE Дата Between ДатаНачала And ДатаКонца
|
|
|
|
|
Supreme Being
      
участник
Last Login: 01.01.2007 16:58
Сообщ.: 725,
Visits: 8 102
|
|
Мыхайло, а як же подальше?
SELECT ... WHERE Дата Between ДатаНачала And ДатаКонца Не пойму, как в зависимости от этого периода будет выбираться "Цена". Напишите, хотя бы для двух моих периодов, подробнее.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 13.03.2008 11:35
Сообщ.: 839,
Visits: 8 738
|
|
| Сначала я было подумал, что у Вас есть таблица "Цена", содержащая 2 поля: "Дата" и "Цена". Но у меня закрадывается подозрение, что это не так... Так что сообщите структуру и назначение полей в таблицах "Zaiavky" и "Цена".
|
|
|
|
|
Supreme Being
      
участник
Last Login: 01.01.2007 16:58
Сообщ.: 725,
Visits: 8 102
|
|
Михайло.
Есть форма "Цена" Вот в эту форму вводятся (и больше в ней ничего нет):
Дата1 Цена1 Дата2 Цена2 Дата3 Цена3 Дата4 Цена4 Дата5 Цена5
Отсюда видно, что в период с "Дата1" по "Дата2" действует "Цена1" и так далее, что и отображается в фрагменте запроса.
Я привел такое количество потому, что у меня в запросе условие IIF отображает именно такое количество изменений цен на газ. В дальнейшем их количество будет возрастать и становится тяжело с таким вот запросом, вернее фрагментом запроса:
IIf([Zaiavky]![DataZak]>=[Дата1] And [Zaiavky]![DataZak]<[Дата2],[Цена]![Цена1],IIf([Zaiavky]![DataZak]>=[Дата2] And [Zaiavky]![DataZak]<[Дата3],[Цена]![Цена2],IIf([Zaiavky]![DataZak]>=[Дата3] And [Zaiavky]![DataZak]<[Дата4],[Цена]![Цена3],IIf([Zaiavky]![DataZak]>=[Дата4] And [Zaiavky]![DataZak]<[Дата5],[Цена]![Цена4],[Цена]![Цена5])))) AS ЦенаРасч,
В полях подчиненной формы отображаются все сведения о заказе. В заказе могут быть баллоны с газом весом 10Кг или 20Кг, Может быть льгота (размером 25%, 50% или 100%), а может отсутствовать. В соответстыующих полях, что совсем сейчас не важно в каких именно, Используя данные "Расчетная цена", "ВесГаза" и "РазмерЛьготы", я определяю соответственно цену баллона с газом для каждого абонента заказавшего газ. Как только я перевожу курсор, в подчиненной форме, на строку, в которой присутствует поле "ДатаЗаказа", у меня в полях главной формы отображается информация о стоимости , на данный период, баллона весом 20Кг, баллона весом 10Кг и стоимость балона газа для абонента, с учетом его всех льгот, той записи на которой мы стоим. (Если заказ датируется допустим 1 января 2003г., то при установке курсора на эту строку у меня отобразится информация о стоимости газа именно на этот период).
Вот эту возможность удается получить благодаря фрагменту запроса приведенного выше.
Теперь, я надеюсь, Вы понимаете роль данного условия. И посколько год за годом цены будут изменятся, а будет желание оставить и старую базу, то у меня два выхода, или за каждый год хранить только базу этого года или искать путь, как короче написать вот то самое условие. Хотя и так можно обойтись, но ведь хочется покороче. Вот в этом суть моего вопроса.
Благодарю.
|
|
|
|
| | |