ВЫБЕРИТЕ COL1 + COL2 как CalcColumn, * ИЗ ТАБЛИЦЫ С (NOLOCK) ГДЕ 100 - PullRequest
1 голос
/ 13 октября 2011

В операторе SELECT, использующем условие, основанное на вычисленном значении, возможно ли включить это вычисленное значение без вычисления вычисленного значения дважды - один раз при выборе и снова в условии?

Я использую SQL Server 2000.

Ответы [ 4 ]

3 голосов
/ 13 октября 2011

Вы можете поместить все в подзапрос и выбрать из этого

Оператор SQL

SELECT *
FROM   (
         SELECT COL1 + COL2 as CalcColumn
         FROM   Table
       ) q
WHERE  100 < CalcColumn 

но что касается производительности, я ожидаю, что она будет медленнее , чем ваш исходный запрос.

2 голосов
/ 13 октября 2011

Не должно быть каких-либо существенных потерь производительности, если вы используете запрос так, как вы его написали.Я думаю, что SQL справится с вами.Мой вопрос: почему вы используете программное обеспечение прошлого века?

Я только что попробовал

SELECT Debit, Credit, Debit+Credit AS CalcColumn FROM JDT1 WHERE CalcColumn > 100

на SQL 2005, как предложили несколько парней, и ошибка: Msg 207, Уровень 16, Состояние 1, Строка 1 Неверное имя столбца 'CalcColumn'.

0 голосов
/ 13 октября 2011

Я обычно создаю представление, чтобы также иметь многоразовые столбцы вычисления.

0 голосов
/ 13 октября 2011
SELECT COL1+COL2 as CalcColumn,* 
FROM TABLE WITH (NOLOCK) 
WHERE 100 < CalcColumn

надеюсь, что это поможет.

...