Использовать значение столбца для другого столбца (SQL Server)?
позволяет сказать, что у меня огромный выбор на определенной таблице. Одно значение для столбца вычисляется с помощью сложного logc и его называется ColumnA. Теперь для другого столбца мне нужно значение из ColumnA и добавить к нему другое статическое значение.
Пример SQL:
select table.id, table.number, complex stuff [ColumnA], [ColumnA] + 10 .. from table ...
[ColumnA] + 10 - это то, что нужно искать. Сложный материал - это огромный случай/когда блок.
Идеи?
Ответы
Ответ 1
Если вы хотите ссылаться на значение, вычисленное в предложении SELECT
, вам нужно переместить существующий запрос в sub-SELECT:
SELECT
/* Other columns */,
ColumnA,
ColumnA + 10 as ColumnB
FROM
(select table.id, table.number, complex stuff [ColumnA].. from table ...
) t
Вы должны ввести псевдоним для этой таблицы (выше, t
, после закрывающей скобки), даже если вы не собираетесь использовать его.
(Эквивалентно - если вы используете SQL Server 2005 или более позднюю версию, вы можете переместить существующий запрос в CTE):
;WITH PartialResults as (
select table.id, table.number, complex stuff [ColumnA].. from table ...
)
SELECT /* other columns */, ColumnA, ColumnA+10 as ColumnB from PartialResults
CTEs выглядят более чистыми, если вы выполняете несколько уровней частичных вычислений, I.e. если теперь у вас есть расчет, который зависит от столбца B для включения в ваш запрос.
Ответ 2
Вы можете решить это с помощью подзапросов и псевдонимов столбцов.
Вот пример:
SELECT MaxId + 10
FROM (SELECT Max(t.Id) As MaxId
FROM SomeTable t) As SomeTableMaxId
Ответ 3
Вы можете:
- Сделайте
+ 10
в клиентском коде
- Напишите скалярнозначную функцию для инкапсуляции логики для
complex stuff
. Он будет оптимизирован в один вызов.
- Скопировать
complex stuff
логику для другого столбца. Он должен быть оптимизирован в 1 вызов.
- Используйте дополнительный выбор для применения дополнительного расчета
Ответ 4
К сожалению, в SQL Server 2016:
SELECT 3 AS a, 6/a AS b;
Ошибка: неверное имя столбца: "a".