2010-01-13 14 views
7

Tengo una duda y pregunta con respecto a alias en sql. Si quiero usar el alias en la misma consulta, ¿puedo usarlo? Por ejemplo: Considere Nombre de la tabla XYZ con la columna A y BUso de alias en la consulta y su uso

select (a/b) as temp , temp/5 from xyz 

¿Es posible esto de alguna manera?

Respuesta

8

¿Está hablando de dar un identificador a una expresión en una consulta y luego reutilizar ese identificador en otras partes de la consulta?

Eso no es posible en Microsoft SQL Server, que casi toda mi experiencia en SQL se limita a. Pero puedes hacer lo siguiente.

SELECT temp, temp/5 
FROM (
    SELECT (a/b) AS temp 
    FROM xyz 
) AS T1 

Obviamente que el ejemplo no es particularmente útil, pero si estuviera usando la expresión en varios lugares que pueden ser más útiles. Puede ser útil cuando las expresiones son largas y desea agruparlas también porque la cláusula GROUP BY requiere que vuelva a establecer la expresión.

En MSSQL también tiene la opción de crear columnas calculadas que se especifican en el esquema de la tabla y no en la consulta.

+0

+1. Buen punto. – Guru

-1

Puede encontrar W3Schools "SQL Alias" para ser de gran ayuda.

Aquí es un ejemplo de su tutorial:

SELECT po.OrderID, p.LastName, p.FirstName 
FROM Persons AS p, 
Product_Orders AS po 
WHERE p.LastName='Hansen' AND p.FirstName='Ola' 

En cuanto a usar el alias más en la consulta, en función de la base de datos que está utilizando podría ser posible.

2

No es posible en la misma cláusula SELECT, suponiendo que su producto SQL es compatible con el nivel de entrada Estándar SQL-92.

Las expresiones (y sus nombres de correlación) en la cláusula SELECT vienen a la existencia 'todo a la vez'; no hay una evaluación de izquierda a derecha que parezca esperar.

Según la respuesta de @Josh Einstein aquí, puede usar una tabla derivada como solución alternativa (con suerte usando un nombre significativo que no sea 'temp' y proporcione uno para la expresión temp/5) tenga en cuenta a la persona que heredará su código).

Tenga en cuenta que el código publicado podría funcionar en el motor de base de datos de MS Access (y asignaría un nombre de correlación sin sentido como Expr1 a su segunda expresión) pero tampoco es un producto SQL real.

5

También puede usar la declaración Oracle with. También hay declaraciones similares disponibles en otros DB. Aquí está el que usamos para Oracle.

with t 
as (select a/b as temp 
from xyz) 
select temp, temp/5 
from t 
/

Esto tiene una ventaja de rendimiento, sobre todo si tiene un complejo de consultas que implican varias consultas anidadas, porque the WITH statement se evalúa sólo una vez y en las sentencias subsiguientes.

1

Su posible que supongo:

SELECT (A/B) as temp, (temp/5) 
FROM xyz, 
(SELECT numerator_field as A, Denominator_field as B FROM xyz), 
(SELECT (numerator_field/denominator_field) as temp FROM xyz); 
Cuestiones relacionadas