La Web del Programador: Comunidad de Programadores
 
    Pregunta:  28718 - ORDERNAR CONSULTA SOBRE UN CAMPO CALCULADO
Autor:  Jordi Adell
Hola !

Tengo un problema con una consulta SQL. No se como ordernar una consulta sobre un campo calculado que es la suma de 2 consultas.

He probado con ORDER BY "la suma de las 2 consultas" (Error)

He probado con asignando un alias sobre el campo y luego ORDER BY Alias (Solicita valor para Alias o genera Error)

LA estructura es

SELECT Campo1, (consulta1 + consulta2) As Vtas FROM ....

La Consulta1 selecciona las Facturas año 99 y la Consulta2 selecciona las Facturas año 00.

El Recordset que se obtiene tiene 2 columnas:

Num CLIENTE - VTAS
-------------------------
1 300
2 400
3 200
...

Lo que me interesa es saber como puedo ordenar la columna VTAS ya que se obtiene a partir de la suma de 2 consultas.

Aqui va el SQL (Reducido)

SELECT TOP 10 CliCod, (SELECT Sum(Importe) FROM Fac99 WHERE FacCli = CliCod) + (SELECT Sum(Importe) FROM Fac00 WHERE FacCli = CliCod) AS VTAS FROM CLIENTES ORDER BY VTAS

Con este codigo no Ordena Nada... :(

Gracias

  Respuesta:  Xime Tamame
Jordi lo que tenes que usar es la instruccion JOIN para unir todas las tablas, aqui va:
SELECT TOP 10 c.CliCod, Sum( f99.Importe ) + Sum( f00.Importe )
FROM ( CLIENTES as C LEFT JOIN Fac99 as F99 ON ( c.CliCod = F99.CliClod )) LEFT JOIN Fac00 as F00 ON ( c.CliCod = F00.CliClod )
GROUP BY c.CliCod
ORDER BY Sum( f99.Importe ) + Sum( f00.Importe )

Y ahora si te va a ordenar ya que los campos son parte de la consulta y no una subconsulta como lo que tenes vos. NO te olvides de poner la instruccion Group by, suerte!!!