Use value of a column for another column (SQL Server)?
You could:
- Do the
+ 10
in the client code - Write a scalar-valued function to encapsulate the logic for
complex stuff
. It will be optimized into a single call. - Copy
complex stuff
logic for the other column. It should get optimized out into 1 call. - Use a sub-select to apply the additional calculation
You could solve this with a subquery and column aliases.
Here's an example:
SELECT MaxId + 10
FROM (SELECT Max(t.Id) As MaxId
FROM SomeTable t) As SomeTableMaxId
If you want to reference a value that's computed in the SELECT
clause, you need to move the existing query into a sub-SELECT:
SELECT
/* Other columns */,
ColumnA,
ColumnA + 10 as ColumnB
FROM
(select table.id, table.number, complex stuff [ColumnA].. from table ...
) t
You have to introduce an alias for this table (in the above, t
, after the closing bracket) even if you're not going to use it.
(Equivalently - assuming you're using SQL Server 2005 or later - you can move your existing query into a 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 tend to look cleaner if you've got multiple levels of partial computations being done, I.e. if you've now got a calculation that depends on ColumnB to include in your query.
Unfortunately, in SQL Server 2016:
SELECT 3 AS a, 6/a AS b;
Error: Invalid column name: 'a'.