Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sql server use computed column

I have a query like this:

select 
(price1 + price2 + price3) as total_price 
from prices

How can i use the computed column total_price to compute other total like this?

select 
(price1 + price2 + price3) as total_price,
(price4 + total_price) as total_price2
from prices    

Is this possible?

like image 526
Vagelis Ouranos Avatar asked Nov 15 '11 11:11

Vagelis Ouranos


2 Answers

No it isn't possible to reference the column alias defined at the same level. Expressions that appear in the same logical query processing phase are evaluated as if at the same point in time.

As Joe Celko says

Things happen "all at once" in SQL, not "from left to right" as they would in a sequential file/procedural language model

You can define it in a CTE and then re-use it outside the CTE however.

Example

WITH T
     AS (SELECT ( price1 + price2 + price3 ) AS total_price,
                price4
         FROM   prices)
SELECT total_price,
       ( price4 + total_price ) AS total_price2
FROM   T  
like image 132
Martin Smith Avatar answered Oct 20 '22 19:10

Martin Smith


I'd also consider a computed column on the table if this will used often

ALTER  TABLE prices ADD
   total_price AS (price1 + price2 + price3)

Then your query is

select 
    total_price,
    (price4 + total_price) as total_price2
from prices

This way, you can apply the DRY principle...

like image 28
gbn Avatar answered Oct 20 '22 19:10

gbn