SQL - Suma de campos en una subconsulta

   
Vista:

Suma de campos en una subconsulta

Publicado por CESAR (1 intervención) el 07/03/2012 23:52:18
buenas, estoy comenzando a hacer reportes, y tengo un pequeño problea, espero me puedana ayudar, tengo lo siguiente;


select cveAutobus, CONVERT (char(10),FechaCorte, 111)as FechaCorte,
ImpTotal as ImpTotal,
sum(CASE cp_intId wHEN 5 THEN cp_decCantidad ELSE 0 END)as GAdmon,
sum(CASE cp_intId wHEN 6 THEN cp_decCantidad ELSE 0 END)as FondoTer,
sum(CASE cp_intId wHEN 7 THEN cp_decCantidad ELSE 0 END)as AporAcc,
sum(CASE cp_intId wHEN 4 THEN cp_decCantidad ELSE 0 END)as Aguinaldo,
sum(CASE cp_intId wHEN 8 THEN cp_decCantidad ELSE 0 END)as Impuesto,
sum(CASE cp_intId wHEN 9 THEN cp_decCantidad ELSE 0 END)as ProdTrab,
sum(CASE cp_intId wHEN 12 THEN cp_decCantidad ELSE 0 END)as Tarjeta,
sum(CASE cp_intId wHEN 11 THEN cp_decCantidad ELSE 0 END)as Accidentes,
sum(CASE cp_intId wHEN 10 THEN cp_decCantidad ELSE 0 END)as Fianza,
sum(CASE cp_intId wHEN 10 THEN cp_decCantidad ELSE 0 END)as Pendientes,
sum(CASE cp_intId wHEN 17 THEN cp_decCantidad ELSE 0 END)as Infraccion,
sum(CASE cp_intId wHEN 20 THEN cp_decCantidad ELSE 0 END)as AportFut,
FolioPermisi,
TotalRec,
(ImpTotal-TotalRec) as total
from Papeleta

group by cveAutobus, FechaCorte, ImpTotal, FolioPermisi, TotalRec
order by cveAutobus, FechaCorte


lo que quiero es obtener un registro con las sumas de columnas del resultado de la query anterior,
lo intente con lo alias en una subconsulta:
...
sum(GAdmon) GAdmon,
sum(FondoTer) FondoTer,
sum(AporAcc) AporAcc,
sum(Aguinaldo) Aguinaldo,
sum(Impuesto) Impuesto,
sum(ProdTrab) ProdTrab,
sum(Tarjeta) Tarjeta,
sum(Accidentes) Accidentes,
sum(Fianza) Fianza,
sum(Pendientes) Pendientes,
sum(Infraccion) Infraccion,
sum(AportFut) AportFut,
'' FolioPermisi,
sum(TotalRec),
sum(total)
from
(select cveAutobus, CONVERT (char(10),FechaCorte, 111)as FechaCorte,
ImpTotal as ImpTotal,
sum(CASE cp_intId wHEN 5 THEN cp_decCantidad ELSE 0 END)as GAdmon,)
sum(CASE cp_intId wHEN 6 THEN cp_decCantidad ELSE 0 END)as FondoTer,
sum(CASE cp_intId wHEN 7 THEN cp_decCantidad ELSE 0 END)as AporAcc,
sum(CASE cp_intId wHEN 4 THEN cp_decCantidad ELSE 0 END)as Aguinaldo,
sum(CASE cp_intId wHEN 8 THEN cp_decCantidad ELSE 0 END)as Impuesto,
sum(CASE cp_intId wHEN 9 THEN cp_decCantidad ELSE 0 END)as ProdTrab,
sum(CASE cp_intId wHEN 12 THEN cp_decCantidad ELSE 0 END)as Tarjeta,
sum(CASE cp_intId wHEN 11 THEN cp_decCantidad ELSE 0 END)as Accidentes,
sum(CASE cp_intId wHEN 10 THEN cp_decCantidad ELSE 0 END)as Fianza,
sum(CASE cp_intId wHEN 10 THEN cp_decCantidad ELSE 0 END)as Pendientes,
sum(CASE cp_intId wHEN 17 THEN cp_decCantidad ELSE 0 END)as Infraccion,
sum(CASE cp_intId wHEN 20 THEN cp_decCantidad ELSE 0 END)as AportFut,
FolioPermisi,
TotalRec,
(ImpTotal-TotalRec) as total
from Papeleta

group by cveAutobus, FechaCorte, ImpTotal, FolioPermisi, TotalRec
order by cveAutobus, FechaCorte)

pero en primera, no me reconoce los alias, marca el nombre de columna invalido
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Suma de campos en una subconsulta

Publicado por leonardo_josue (880 intervenciones) el 08/03/2012 20:43:01
Hola Cesar:

El error puede estar en esta línea (en tu post no nos dices en qué linea marca el error, deberías de haber incluido el mensaje completo)

1
sum(CASE cp_intId wHEN 5 THEN cp_decCantidad ELSE 0 END)as GAdmon,)


Al final del renglón estás cerrando el paréntesis de la subconsulta. Otro problema también puede ser el ORDER BY. algunos DBMS no soportan ordenación en subconsultas, y para efectos prácticos no se necesita. Si requieres la información en algún orden específico lo pones EN LA CONSULTA EXTERNA.

prueba con esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
SELECT
SUM(T.GAdmon) GAdmon,
SUM(T.FondoTer) FondoTer,
SUM(T.AporAcc) AporAcc,
SUM(T.Aguinaldo) Aguinaldo,
SUM(T.Impuesto) Impuesto,
SUM(T.ProdTrab) ProdTrab,
SUM(T.Tarjeta) Tarjeta,
SUM(T.Accidentes) Accidentes,
SUM(T.Fianza) Fianza,
SUM(T.Pendientes) Pendientes,
SUM(T.Infraccion) Infraccion,
SUM(T.AportFut) AportFut,
'' FolioPermisi,
SUM(T.TotalRec),
SUM(T.total)
FROM
(SELECT cveAutobus, CONVERT (CHAR(10),FechaCorte, 111) AS FechaCorte,
ImpTotal AS ImpTotal,
SUM(CASE cp_intId WHEN 5 THEN cp_decCantidad ELSE 0 END)AS GAdmon,
SUM(CASE cp_intId WHEN 6 THEN cp_decCantidad ELSE 0 END)AS FondoTer,
SUM(CASE cp_intId WHEN 7 THEN cp_decCantidad ELSE 0 END)AS AporAcc,
SUM(CASE cp_intId WHEN 4 THEN cp_decCantidad ELSE 0 END)AS Aguinaldo,
SUM(CASE cp_intId WHEN 8 THEN cp_decCantidad ELSE 0 END)AS Impuesto,
SUM(CASE cp_intId WHEN 9 THEN cp_decCantidad ELSE 0 END)AS ProdTrab,
SUM(CASE cp_intId WHEN 12 THEN cp_decCantidad ELSE 0 END)AS Tarjeta,
SUM(CASE cp_intId WHEN 11 THEN cp_decCantidad ELSE 0 END)AS Accidentes,
SUM(CASE cp_intId WHEN 10 THEN cp_decCantidad ELSE 0 END)AS Fianza,
SUM(CASE cp_intId WHEN 10 THEN cp_decCantidad ELSE 0 END)AS Pendientes,
SUM(CASE cp_intId WHEN 17 THEN cp_decCantidad ELSE 0 END)AS Infraccion,
SUM(CASE cp_intId WHEN 20 THEN cp_decCantidad ELSE 0 END)AS AportFut,
FolioPermisi,
TotalRec,
(ImpTotal-TotalRec) AS total
FROM Papeleta
GROUP BY cveAutobus, FechaCorte, ImpTotal, FolioPermisi, TotalRec
) T
ORDER BY agregas_la_lista_de_campos_a_ordenar


Ahora bien, a reserva de que nos expliques bien qué es lo que quieres hacer, creo que podrías hacer la misma consulta sin necesidad de una subconsulta. Si a final de cuentas necesitas un acumulado completo podrías hacerlo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT
SUM(CASE cp_intId WHEN 5 THEN cp_decCantidad ELSE 0 END)AS GAdmon,
SUM(CASE cp_intId WHEN 6 THEN cp_decCantidad ELSE 0 END)AS FondoTer,
SUM(CASE cp_intId WHEN 7 THEN cp_decCantidad ELSE 0 END)AS AporAcc,
SUM(CASE cp_intId WHEN 4 THEN cp_decCantidad ELSE 0 END)AS Aguinaldo,
SUM(CASE cp_intId WHEN 8 THEN cp_decCantidad ELSE 0 END)AS Impuesto,
SUM(CASE cp_intId WHEN 9 THEN cp_decCantidad ELSE 0 END)AS ProdTrab,
SUM(CASE cp_intId WHEN 12 THEN cp_decCantidad ELSE 0 END)AS Tarjeta,
SUM(CASE cp_intId WHEN 11 THEN cp_decCantidad ELSE 0 END)AS Accidentes,
SUM(CASE cp_intId WHEN 10 THEN cp_decCantidad ELSE 0 END)AS Fianza,
SUM(CASE cp_intId WHEN 10 THEN cp_decCantidad ELSE 0 END)AS Pendientes,
SUM(CASE cp_intId WHEN 17 THEN cp_decCantidad ELSE 0 END)AS Infraccion,
SUM(CASE cp_intId WHEN 20 THEN cp_decCantidad ELSE 0 END)AS AportFut,
'' FolioPermisi,
SUM(TotalRec),
SUM(ImpTotal)-SUM(TotalRec) AS total
FROM Papeleta
ORDER BY agregas_la_lista_de_campos_a_ordenar


Haz la prueba y nos comentas los resultados.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar