|
Можно ли в запросе использовать результат функции
| ☑ |
0
al_an77
16.07.16
✎
11:01
|
Например в запросе есть строка
Выразить(ТЧ.ЦенаВал * &Курс Как Число(15,2)) как ЦенаРуб
Могу ли в следующей строке запроса обращаться к ценаруб?
Выразить(ценаруб * ТЧ.Количество как число(15,2))
Или придется в каждой строке целиком описывать расчет ценыруб?
|
|
1
В тылу врага
16.07.16
✎
11:14
|
придется описывать
но не переживай, сервер БД очень умный и возможно оптимизирует
|
|
2
RomanYS
16.07.16
✎
11:29
|
результат запроса во временную таблицу, а в следующем пакете делай с ценаруб что хочешь.
|
|
3
В тылу врага
16.07.16
✎
11:36
|
(2) по-моему не стоит того
|
|
4
Фрэнки
16.07.16
✎
11:45
|
(0) попробуй конструктором заставить сделать группировку по ЦенаРуб и он тебе покажет, как он это может делать на самом деле и ответит на твой вопрос.
(3) На все случаи не зарекайся. Пакетные запросы и создание виртуальных таблиц тоже имеют право на жизнь
|
|
5
Фрэнки
16.07.16
✎
11:51
|
(0) лично я сделал бы отдельной таблицей расчет всех нужных полей, а уже затем выполнил какие-то операции над результирующей. Это если ЦенаРуб нужна в обращениях.
А если нужна перед обработкой результата, то и вычислять ее перед результатом, когда выборка уже определена со составу и осталось только посчитать.
Так и внешне логично, и оптимизатор тебе сюрпрайз не подкинет. Еще можно первую-вторую-промежуточную временную проиндексировать для ускорения соединений и пронести вычисленные данные по многим другим источникам (если их там действительно много и объемы выборки существенные).
|
|
6
Горогуля
16.07.16
✎
12:03
|
а на зачем это округление в "следующей строке"?
|
|
7
В тылу врага
16.07.16
✎
13:23
|
(4) не зарекаюсь, но они для того чтобы данные не выбирать повторно, а не для отказа от дублирования полей
|
|
8
bura_limon
16.07.16
✎
20:04
|
(0) если скуль,то у него есть кэш вызова,если скуль отработал функцию,результат сохр.в кэше,следующий раз он не будет делать запрос снова,а вернет результат из кэша.
|
|