Форум: "Базы";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];
ВнизЗапрос в MS SQL Server Найти похожие ветки
← →
Nikolai_S (2003-07-28 16:37) [0]Почему в запросах MS SQL Server нельзя ссылаться на алиасы вычисляемых полей? Например в запросе
SELECT [F1] + [F2] AS [ALIAS_SUM], [ALIAS_SUM] * [F3] FROM [MY_TABLE]
выдается ошибка:
Invalid column name "ALIAS_SUM".
Данный пример простой. Реально же вычисляемое поле гораздо сложнее и повторять его дважды - это слишком громоздко. И потом наверняка увеличится время выполнения запроса. В MS Access подобная вещь нормально работает...
← →
Fay (2003-07-28 17:09) [1]Ку?
SELECT
[ALIAS_SUM] = Q.[ALIAS_SUM],
[ЧЁ-ТО] = Q.[ALIAS_SUM]*Q.[F3]
FROM
(SELECT
[ALIAS_SUM] = [F1] + [F2],
[F3]
FROM [MY_TABLE]
) Q
← →
KSergey (2003-07-28 17:29) [2]А еще есть View для таких вот дел...
← →
Fay (2003-07-28 17:31) [3]>>И потом наверняка увеличится время выполнения запроса
А проверить?
← →
Nikolai_S (2003-07-28 17:46) [4]> KSergey © (28.07.03 17:29)
Я остановился пока на View. Хотя у меня сотня таких запросов. Не охота их все через View.
> Fay (28.07.03 17:09)
Данный вариант тоже громоздкий. К тому же у меня очень сложный запрос и поле вычислется на основе полей из разных таблиц. Таким образом мне кажется не менее громоздко будет.
> Fay (28.07.03 17:31)
Сравнить быстродействие пока не могу, т.к. база данных пустая. Вбиваю по несколько записей для проверки запросов и все. Хотя догадываюсь, что через View гораздо быстрее будет.
← →
Fay (2003-07-28 17:48) [5]>> Сравнить быстродействие пока не могу, т.к. база данных пустая
>> Данный вариант тоже громоздкий.
В смысле???
← →
KSergey (2003-07-28 17:49) [6]Nikolai_S © (28.07.03 17:46)
Не охота их все через View.
А кого это интересует? Надо федя, надо... ;)
← →
sniknik (2003-07-28 18:42) [7]Fay (28.07.03 17:48)
>> Сравнить быстродействие пока не могу, т.к. база данных пустая
>> Данный вариант тоже громоздкий.
В смысле???
тест на базе Northwind 2155 записей
SELECT UnitPrice+Quantity as ALIAS_SUM, (UnitPrice+Quantity)*Discount as [ЧЁ-ТО] FROM Invoices
время выполнения 08-09 мск.
с подзапросом как у тебя
SELECT [ALIAS_SUM] = Q.[ALIAS_SUM], [ЧЁ-ТО] = Q.[ALIAS_SUM]*Q.[Discount]
FROM (SELECT [ALIAS_SUM] = UnitPrice+Quantity, Discount FROM [Invoices] ) Q
время выполнения 12-14 мск.
и чем больше записей в таблице тем разница будет ощутимей
(вот это и значит "громоздкий")
Nikolai_S © (28.07.03 16:37)
> И потом наверняка увеличится время выполнения запроса.
а ты проверял? по моему так это будет самый быстрый вариант (повторить дважды).
← →
Nikolai_S (2003-07-28 19:02) [8]> sniknik © (28.07.03 18:42)
Ну вообще похоже, что действительно время запроса не увеличивается, если дважды повторить выражение. Но это такой громадный запрос тогда получается. Его визуально невозможно понять. Я через View все сделал - так хоть понятнее и меньше вероятность ошибки при правках.
Но вот почему SQL Server через алиасы не дает обращаться - это не понятно :-( . Access нормально съедает такие запросы...
Еще такая проблема есть - когда складываем два поля, одно из которых NULL, то результат всегда тоже NULL. Приходится каждое поле проверять и если оно NULL, то подставлять 0. Тоже занудное занятие. Хотя здесь своя логика, конечно, присутствует.
← →
sniknik (2003-07-28 20:06) [9]> Но это такой громадный запрос тогда получается. Его визуально невозможно понять.
конечно как удобнее, но запросы можно делать многострочными и форматированными. видел такие (сам пока обходился) что целая программа в одном запросе...
> Еще такая проблема есть - когда складываем два поля, одно из которых NULL, то результат всегда тоже NULL.
не такая уж большая проблема
UnitPrice+Quantity
=
isNull(UnitPrice,0)+isNull(Quantity,0)
также делаеш?
← →
Nikolai_S (2003-07-29 10:35) [10]Нет, я поначалу делал через case. Про функцию IsNull не знал. Спасибо за информацию.
← →
KSergey (2003-07-29 12:17) [11]Еще такая проблема есть - когда складываем два поля, одно из которых NULL, то результат всегда тоже NULL.
Это не проблема, это документированное поведение.
← →
Nikolai_S (2003-07-30 16:44) [12]А есть ли аналог функции IsNull в MS Access?
Там есть тоже функция IsNull(VarExpr), но она аналогично выражению [MyField] IS NULL.
← →
handra (2003-07-30 17:16) [13]Nikolai_S © (30.07.03 16:44)
А есть ли аналог функции IsNull в MS Access?
Там есть тоже функция IsNull(VarExpr), но она аналогично выражению [MyField] IS NULL. увы - нет
← →
sniknik (2003-07-30 17:18) [14]такой удобной с заменой по моему нет (не знаю)
делал так
iif(IsNull(VarExpr),VarExpr,0)
← →
sniknik (2003-07-30 17:20) [15]:о)) а вернее наоборот. ну поймеш.
← →
Nikolai_S (2003-07-30 17:45) [16]> sniknik © (30.07.03 17:20)
Ну я так тоже сделал, благо Access в отличие SQL Server разрешает алиасы вычисляемых полей подставлять, чтобы не пришлось все огромное выражение по два раза вставлять :-)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c