repite repitan repetir registros que para left inner evitar duplicidad duplicados duplica datos consulta como sql-server tsql

sql server - repitan - ¿Cómo reutilizar las columnas calculadas para evitar duplicar el enunciado sql?



inner join sin repetir (6)

La única forma 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.

Tengo muchas columnas calculadas y siguen repitiéndose, una dentro de las otras, incluidas las declaraciones de casos anidados.

Hay una versión realmente simplificada de algo que busco en una forma de hacer.

SELECT (1+2) AS A, A + 3 AS B, B * 7 AS C FROM MYTABLE

Gracias por adelantado.


No puede hacer referencia a las expresiones recién creadas al hacer 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 Podrá hacer columnas computadas "más simples" sin repetirlas, y verá lo mismo: tendrá que anidar cosas, como:

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

O repite la expresión (pero supongo que eso es lo que intentas evitar).


Podrías probar 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)


Puede crear columnas calculadas para representar los valores que desea. Además, puede usar una vista si sus cálculos dependen de los datos en una tabla separada.


Otra opción si alguien todavía está 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


¿Desea resultados calculados de su 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 de select .

¿O desea que los resultados calculados aparezcan como columnas en la tabla y luego use una columna calculada?

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