2010-03-15 17 views
9

me gustaría lograr algo como esto:Re-uso en el campo alias de instrucción SQL SELECT

SELECT 
    (CASE WHEN ...) AS FieldA, 
    FieldA + 20 AS FieldB 
FROM Tbl 

Suponiendo que por "..." He reemplazado una larga y compleja comunicado CASO, No quiero repetir al seleccionar FieldB y usar el alias FieldA en su lugar.

Tenga en cuenta que esto devolverá varias filas, por lo tanto, el DECLARE/SET fuera de la declaración SELECT no es bueno en mi caso.

Respuesta

11

Un workaroud sería utilizar una sub-consulta:

SELECT 
    FieldA, 
    FieldA + 20 AS FieldB 
FROM (
    SELECT 
    (CASE WHEN ...) AS FieldA 
    FROM Tbl 
) t 

para mejorar la legibilidad también se podría utilizar un CTE:

WITH t AS (
    SELECT 
    (CASE WHEN ...) AS FieldA 
    FROM Tbl 
) 
SELECT 
    FieldA, 
    FieldA + 20 AS FieldB 
FROM 
    t 
+2

o tal vez un CTE para mejorar la legibilidad. – JohnFx

+0

@JohnFx: Buen punto, extendió mi respuesta. –

+0

Personalmente encuentro que la tabla derivada es más fácil de leer, pero así soy yo. – HLGEM

3

Cuando he complicado la lógica para calcular una valor de columna "virtual" de otros valores de columna en una tabla Generalmente, creo una vista de tabla única de la tabla original con todas las columnas originales más los valores calculados también. Luego hago otros SELECT contra la vista. Eso me permite:

  1. Para nombrar mis columnas calculadas.

  2. Para mantener la lógica de los cálculos en un solo lugar en lugar de dispersos a través de varias consultas en la aplicación.

+0

¿Sabes si es mejor para el rendimiento? – Fractaliste

+0

No afectará el rendimiento * a menos que * esté usando un motor que ofrezca vistas materializadas y lo cree como una vista materializada, en cuyo caso disminuirá el rendimiento de escritura pero aumentará el rendimiento de la consulta. –

Cuestiones relacionadas