Использовать значение столбца для другого столбца (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

вы можете:

  1. сделать + 10 в клиентском коде
  2. напишите скалярную функцию, чтобы инкапсулировать логику для complex stuff. Он будет оптимизирован в один вызов.
  3. скопировать complex stuff логика для другого столбца. Он должен быть оптимизирован в 1 вызов.
  4. используйте подвыбор, чтобы применить дополнительный расчет