2011-11-15 18 views
6

Ho una domanda come questa:uso sql server calcolata colonna

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

Come posso utilizzare il total_price colonna calcolata per calcolare altre totale come questo?

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

È possibile?

+0

'È possibile? ', L'hai provato tu stesso? –

+1

Naturalmente l'ho provato. Ricevo un messaggio "column total_price". È quello che sto cercando di realizzare? – Khronos

+4

Non all'interno della stessa query: il processore di query non può utilizzare le colonne di output come colonne di input. È necessario scrivere formule ogni volta o creare una query interna, che calcola le colonne calcolate di primo livello e quindi seleziona da quella query, calcolando le formule di livello successivo. – Arvo

risposta

11

No, non è possibile fare riferimento all'alias della colonna definito allo stesso livello. Le espressioni che appaiono nella stessa fase di elaborazione della query logica sono evaluated as if at the same point in time.

As Joe Celko says

Le cose accadono "tutto e subito" in SQL, non "da sinistra a destra", come si avrebbero in un/modello di linguaggio procedurale file sequenziale

si può definire in un CTE e quindi riutilizzarlo fuori dal CTE comunque.

Esempio

WITH T 
    AS (SELECT (price1 + price2 + price3) AS total_price, 
       price4 
     FROM prices) 
SELECT total_price, 
     (price4 + total_price) AS total_price2 
FROM T 
1
select T.total_price, 
     P.price4 + T.total_price as total_price2 
from prices as P 
    cross apply (select P.price1 + P.price2 + P.price3) as T(total_price) 
3

Mi piacerebbe anche prendere in considerazione una computed column sul tavolo, se questo sarà utilizzato spesso

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

Quindi la query è

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

In questo modo , puoi applicare la D Principio RY ...

Problemi correlati