В запросе одновременно 3 поля одного стобца с разными интервалами.
Rare_Frame
Дата: 19.12.2011 21:54:06
Делаю рассчет налога транспортного и не могу сделать условие отбора.
Сделал 5 запросов из таблицы с мощностью (до 100 лс, от 100 до 150 и тд.)
а вот теперь в каждом запросе (от 150 лошадей) пробую создать 3 поля Срок службы, где бы выводились данные из др. таблицы со сроком так же от 0 до 5, от 5 до 10, свыше 10, но выводит только фио с мощностью запроса и последний запрос на срок службы, т.е свыше 10, а 2 других поля называются Expr1002 и Expr1003
SELECT [Мощность двигателя].ФИО, [Мощность двигателя].[Мощность двигателя л с], [Срок работы].[Срок работы], [Срок работы].[Срок работы], [Срок работы].[Срок работы]
FROM [Мощность двигателя] INNER JOIN [Срок работы] ON ([Мощность двигателя].Код = [Срок работы].Код) AND ([Мощность двигателя].ФИО = [Срок работы].ФИО)
WHERE ((([Мощность двигателя].[Мощность двигателя л с])>150 And ([Мощность двигателя].[Мощность двигателя л с])<=200) AND (([Срок работы].[Срок работы])>="0" And ([Срок работы].[Срок работы])<="5") AND (([Срок работы].[Срок работы])>="6" And ([Срок работы].[Срок работы])<="10") AND (([Срок работы].[Срок работы])>="11"))
ORDER BY [Мощность двигателя].[Мощность двигателя л с] DESC;
подскажите пожалуйста, почему не выполняет?
Rare_Frame
Дата: 19.12.2011 22:00:58
Делаю так, потому что не знаю как в одном поле сделать сразу выборку из мощностей авто и сроков службы., т.е. что бы было 2 условия... сам не могу объяснить, в общем сначала определялся тип авто по мощности, потом по сроку службы а потом умножается мощность на ставку (но это как раз самое легкое, вроде как).
mds_world
Дата: 19.12.2011 22:10:55
1. Условия в запросе взаимоисключающие. Одна и таже величина не может быть одновременно и в интервале 0-5, и в интервале 6-10.
2. Повторенное 4 раза одно и то же поле, будет тем же самым полем. Сколько не повторяй "халва", во рту слаще не станет.
Разнообразные, взимоисключающие условия можно примирить в одном запросе на объединение (с юнионами). Задавая в каждом из подзапросов свой набор условий.
alvk
Дата: 20.12.2011 05:31:11
Rare_Frame,
вычислемое поле в запросе делайте с iif.
Rare_Frame
Дата: 20.12.2011 09:36:27
попробовал сделать, что то не правильно:
Сумма налога:iif( [Срок работы].[Срок работы] >=0 and <=5;[Мощность двигателя].[Мощность двигателя л с] *30 ; iif( [Срок работы].[Срок работы] >=6 and <=10; [Мощность двигателя].[Мощность двигателя л с]*22,5 ; iif( [Срок работы].[Срок работы] >=11; [Мощность двигателя].[Мощность двигателя л с]*15; 0)))
можно ли так делать?
т.е. в случае нет проверять на следующее условие, и тд, а в конце ноль, просто не знаю что в конце добавить в случае нет.
Программист-Любитель
Дата: 20.12.2011 09:44:28
Если налог можно представить в виде матрицы с измерениями Мощность двигателя и Срок службы, то удобнее всего хранить ставку налога именно в таком виде. А значения для конкретного случая вытаскивать соединенеми через BETWEEN.
Данные по налогу будут наглядно представлены. Их удобно будет редактировать. Нужное значения ставки будет вытаскиваться автоматически без изменения кода запросов.
Учитывая жизненные реалии, можно предусмотреть изменения ставки налога по времени. Тогда каждая строка записи в таблице ставки будет иметь две даты - действует С, действует ПО и для получения нужной ставки для соединения потребуется передавать агрумент Дату по состоянию на.
iif - ужас
Rare_Frame
Дата: 20.12.2011 17:58:38
SELECT [Мощность двигателя].ФИО, [Мощность двигателя].[Мощность двигателя л с], [Срок работы].[Срок работы], [Мощность двигателя].[Мощность двигателя л с]*30 AS [Сумма налога]
FROM [Мощность двигателя] INNER JOIN [Срок работы] ON ([Мощность двигателя].Код = [Срок работы].Код) AND ([Мощность двигателя].ФИО = [Срок работы].ФИО)
WHERE ((([Мощность двигателя].[Мощность двигателя л с])>150 And ([Мощность двигателя].[Мощность двигателя л с])<=200) AND (([Срок работы].[Срок работы]) In (0,1,2,3,4,5)))
ORDER BY [Мощность двигателя].[Мощность двигателя л с] DESC;
сделал так, теперь получаю мощность двигателя умноженную на ставку по одному типу срока службы (от 0 до 5)
а вот как сюда добавить еще 2 варианта срока с последующим умножением на другую ставку?
mds_world
Дата: 20.12.2011 18:03:58
Rare_Frame,
откуда, из какой таблицы, поля берется значение ставки налога? 30 это ставка налога? Для каких условий?
Рекомендация
Программист-Любитель вас не заинтересовала?
Rare_Frame
Дата: 20.12.2011 18:08:53
30 это ставка налога за каждую л.с. для авто с мощностью от 150 до 200 лошадей и сроком службы до 5 лет вкл.
Рекомендацию не могу использовать в силу недостатка умений :)
Образование гуманитарное, а предмет ИТ в налогообложении есть.
Rare_Frame
Дата: 20.12.2011 18:23:53
есть еще 2 ставки для 150-200 л.с., это 22,5 за лошадь для 5-10 лет, и 15 для >10 лет.