Как можно иначе (возможно прозрачнее).
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Как можно иначе (возможно прозрачнее). Expand / Collapse
Автор
Сообщение
25.12.2004 21:00
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme 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, если можно, то пожалуйста как. У меня не получается, возможно объем в этом случае будет не меньше, но более прозрачная читаемость будет, при большом количестве изменений цен.

Благодарю.
Сообщ. #850119
27.12.2004 9:31
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.05.2008 14:52
Сообщ.: 884, Visits: 9 728
Используйте ф-ю Switch (советую в качестве последнего условия поставить TRUE, ВашеЗначениеПоУмолчанию) чтобы избежать возможного значения NULL
Удачи
Сообщ. #850160
27.12.2004 11:31
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 13.03.2008 11:35
Сообщ.: 839, Visits: 8 738
Функция Switch работает со списком выражений (нужно писать константы вручную) и для сохранённого запроса, основанного на таблице "Дата-Цена", не применима...
А почему бы не использовать функцию Between (тем более, что Светочка с ней работает)?
Сообщ. #850182
27.12.2004 13:31
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 01.01.2007 16:58
Сообщ.: 725, Visits: 8 102
Ребята, благодарю.

А как можно использовать Between?

У меня, когда я стаю на любую запись в подчиненной форме,благодаря этому запросу, в зависимости от "ДатаХ" в этой строке, в главной форме отображается стоимость услуги для выбранного абонента, с учетом % его льготы.
Сообщ. #850205
27.12.2004 17:21
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 13.03.2008 11:35
Сообщ.: 839, Visits: 8 738
Подразумевалось, что всё Ваше длинное условие можно сократить до выражения типа

SELECT ... WHERE Дата Between ДатаНачала And ДатаКонца
Сообщ. #850268
27.12.2004 19:06
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 01.01.2007 16:58
Сообщ.: 725, Visits: 8 102
Мыхайло, а як же подальше?

SELECT ... WHERE Дата Between ДатаНачала And ДатаКонца

Не пойму, как в зависимости от этого периода будет выбираться "Цена".
Напишите, хотя бы для двух моих периодов, подробнее.
Сообщ. #850295
28.12.2004 11:35
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 13.03.2008 11:35
Сообщ.: 839, Visits: 8 738
Сначала я было подумал, что у Вас есть таблица "Цена", содержащая 2 поля: "Дата" и "Цена". Но у меня закрадывается подозрение, что это не так... Так что сообщите структуру и назначение полей в таблицах "Zaiavky" и "Цена".
Сообщ. #850357
28.12.2004 19:10
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme 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г., то при установке курсора на эту строку у меня отобразится информация о стоимости газа именно на этот период).

Вот эту возможность удается получить благодаря фрагменту запроса приведенного выше.

Теперь, я надеюсь, Вы понимаете роль данного условия.
И посколько год за годом цены будут изменятся, а будет желание оставить и старую базу, то у меня два выхода, или за каждый год хранить только базу этого года или искать путь, как короче написать вот то самое условие.
Хотя и так можно обойтись, но ведь хочется покороче.
Вот в этом суть моего вопроса.

Благодарю.
Сообщ. #850442
28.12.2004 19:30