2010-06-20 11 views
5

¿Sabe cómo puede asignar un nombre de columna temporal a un valor de retorno en una declaración SQL como esta?Seleccione AS temp_name FROM table WHERE temp_name = something?

SELECT something+this+that AS myvalue FROM mytable 

¿Es posible utilizar el nombre temporal myvalue como un condicional?

SELECT something+this+that AS myvalue FROM mytable WHERE myvalue = 10 

Parece que no puedo entender la sintaxis para hacer esto. La única manera en que puedo encontrar la manera de hacerlo es volver a escribir a cabo toda la definición de columna de nuevo como esto:

SELECT something+this+that AS myvalue FROM mytable WHERE something+this+that = 10 

Obviamente, el ejemplo anterior es un ejemplo trivial. Mi consulta sobre la que necesito hacer esto es extremadamente compleja, por lo que tener que reescribir cada definición de columna devuelta para cada condicional será bastante complicada.

Así que de todos modos, ¿cuál es la sintaxis para esto? ¿Es posible?

+0

¿Qué versión de SQL Server? –

Respuesta

7

Utilizar una tabla derivada ...

SELECT 
    myvalue 
FROM 
    (
    SELECT something+this+that AS myvalue FROM mytable 
    ) foo 
WHERE 
    myvalue = 10 

o utilizar un CTE que se parece más elegante, pero es el mismo

;WITh myCTE AS 
(
    SELECT something+this+that AS myvalue FROM mytable 
) 
SELECT 
    myvalue 
FROM 
    myCTE 
WHERE 
    myvalue = 10 

O una columna calculada por lo que es utilizable normalmente

ALTER TABLE MyTable ADD myvalue AS something+this+that 
0

No creo que sea posible, pero puede hacer trampa colocando los datos en una tabla temporal y luego ejecutando una segunda consulta para ejecutar el resto.

Eso, o SQL dinámico, pero no soy fanático de este último.

-1

SELECCIONE algo + this + that AS myvalue FROM mytable DONDE myvalu e = 10

Usted podría intentar algo así:

SELECT something+this+that AS myvalue 
FROM `users` 
HAVING myvalue=10; 
Cuestiones relacionadas