28 messaggi dal 24 luglio 2006
è possibile usare un alias di una colonna in una clausola where
esempio
select costo,durata,costo*durata as costototale
where costototale > 100
questo mi dà errore
esiste un modo per fare questa cosa?
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
fede_pippo ha scritto:
è possibile usare un alias di una colonna in una clausola where
esempio
select costo,durata,costo*durata as costototale
where costototale > 100
questo mi dà errore
esiste un modo per fare questa cosa?


la definizione di "expression" valide nella clausola WHERE, come riportato dai BOL, recita:
"....
expression
Is a column name, a constant, a function, a variable, a scalar subquery, or any combination of column names, constants, and functions connected by an operator or operators, or a subquery. The expression can also contain the CASE function.
...."

e come hai potuto dedurre non puoi utilizzare l'alias, e per un semplice motivo:
la clausola WHERE rimuove le righe che non soddisfino i filtri impostati, cioe' che non ritornino, in base al filtro di WHERE, un risultato VERO (true), per cui falso e unknown vengono scartati.. tale clausola viene applicata al working set derivante dalla esplosione della clausola FROM.. ma prima dell'esplosione della <select_list> e quindi della definizione degli alias..

puoi pero' "ripetere" l'espressione da considerarsi nella where al posto dell'alias stesso, come semplicemento indicato di seguito..
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.Test(
Id int NOT NULL IDENTITY PRIMARY KEY,
Costo decimal (8,2) NOT NULL,
Durata int NOT NULL
);

INSERT INTO dbo.Test VALUES ( 5 , 1 );
INSERT INTO dbo.Test VALUES ( 5 , 2 );
INSERT INTO dbo.Test VALUES ( 5 , 3 );
SELECT Id, Costo, Durata, (Costo * Durata) AS [Costo Totale]
FROM dbo.Test
WHERE (Costo * Durata) > 10;
GO
DROP TABLE dbo.Test;
--<----------
Id Costo Durata Costo Totale
----------- ------- ----------- -------------
3 5.00 3 15.00

saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.