Использовать значение столбца для другого столбца (SQL Server)?
допустим, у меня есть огромный выбор на определенной таблице. Одно значение для столбца вычисляется со сложным logc и называется ColumnA. Теперь, для другого столбца, мне нужно значение от ColumnA и добавьте к нему другое статическое значение.
пример SQL:
select table.id, table.number, complex stuff [ColumnA], [ColumnA] + 10 .. from table ...
на [ColumnA] + 10 - это то, что im ищет. Сложный материал-огромный блок case / when.
идеи?
3 ответов
если вы хотите ссылаться на значение, которое вычисляется в SELECT
предложение, вам нужно переместить существующий запрос в суб-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, как правило, выглядят чище, если у вас есть выполняется несколько уровней частичных вычислений, т. е. если теперь у вас есть расчет, который зависит от ColumnB для включения в ваш запрос.
вы можете решить эту проблему с помощью подзапрос и псевдонимы столбцов.
вот пример:
SELECT MaxId + 10
FROM (SELECT Max(t.Id) As MaxId
FROM SomeTable t) As SomeTableMaxId
вы можете:
- сделать
+ 10
в клиентском коде - напишите скалярную функцию, чтобы инкапсулировать логику для
complex stuff
. Он будет оптимизирован в один вызов. - скопировать
complex stuff
логика для другого столбца. Он должен быть оптимизирован в 1 вызов. - используйте подвыбор, чтобы применить дополнительный расчет