2011-07-28 32 views

Respuesta

16

Usted podría intentar algo como esto.

SELECT 
    A.Val AS A, 
    B.Val AS B, 
    C.Val AS C 
FROM MYTABLE 
    cross apply(select 1 + 2) as A(Val) 
    cross apply(select A.Val + 3) as B(Val) 
    cross apply(select B.Val * 7) as C(Val) 
+0

esto se puede hacer uso de los casos anidados y/o una suma? –

+0

@Eduardo No estoy seguro de lo que quiere decir. Actualice la pregunta con algunas consultas de muestra con partes repetitivas que quiera eliminar y yo u otra persona pueda echarle un vistazo. –

1

La única manera de "guardar" los resultados de sus cálculos sería usarlos en una subconsulta, de esa manera puede usar A, B and C. Lamentablemente no se puede hacer de otra manera.

1

Puede crear computed columns para representar los valores que desea. Además, puede usar un view si sus cálculos dependen de los datos en una tabla separada.

0

¿Deseas que los resultados calculados de la tabla? En ese caso, puede colocar los cálculos relevantes en la función definida por el usuario de valor escalar y usar eso dentro de su declaración select.

o quieres que los resultados calculados para aparecer como columnas en la tabla, a continuación, utilizar una columna calculada:

CREATE TABLE Test(
    ID INT NOT NULL IDENTITY(1,1), 
    TimesTen AS ID * 10 
) 
6

No se puede hacer referencia a las expresiones recién creadas haciendo referencia posterior a sus alias de columna. Piense en toda la lista de selección como materializada al mismo tiempo o en orden aleatorio: A todavía no existe cuando está tratando de crear una expresión para crear B. Necesita repetir las expresiones. No creo que usted 'll ser capaz de hacer 'más simples' columnas calculadas sin repetirlos, y considera que la misma - que tendrá que anidan cosas, como:

SELECT A, B, C = B * 7 
FROM 
(
    SELECT A, B = A + 3 
    FROM 
    (
    SELECT A = (1 + 2) 
) AS x 
) AS y; 

O repetir la expresión (pero supongo que eso es lo que' estoy tratando de evitar).

4

Otra opción si alguien sigue interesado:

with aa(a) as (select 1+2) 
, bb(b) as (select a+3 from aa) 
,cc(c) as (select b*7 from bb) 
SELECT aa.a, bb.b, cc.c 
from aa,bb,cc 
Cuestiones relacionadas