SQL - PROBLEMAS CON GROUP BY

   
Vista:

PROBLEMAS CON GROUP BY

Publicado por Liliana (5 intervenciones) el 08/10/2008 21:45:30
Hola,
Ojala alguien pueda ayudarme... necesito calcular unos totales utilizando la instruccion GROUP BY
Si por ejemplo tengo esto:
Cuenta ImporteDerechos ImporteImpuestos
4 20.3 1.00
3 563.00 22.50
4 26.10 5.00

Mi intención con la consulta (que me marca error) es que arroje la sumatoria de ImporteDerechos e ImporteImpuestos agrupando por Cuenta, el resultado sería:

Cuenta ImporteDerechos ImporteImpuestos
4 46.40 6.00
3 563.00 22.50

Mi consulta es asi:

SELECT EC.iCuenta AS Cuenta, ImporteDerechos = (CASE WHEN A.smlLActividad > 100
THEN SUM(A.mnyImporteDerecho) ELSE 0 END), ImporteImpuestos = (CASE WHEN
A.smlLActividad > 100 THEN SUM(A.mnyImporteArt) ELSE 0 END)
FROM TB_ActividadesLicencia A, TB_EnlaceCalificacion EC, TB_Licencia L
WHERE A.iCodLicencia = @iCodLicencia AND A.iCodLicencia = L.iCodLicencia AND
A.iRelacion = EC.iRelacion

pero me marca error:

Column 'A.smlLActividad' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

He pensado en utilizar una tabla temporal pero quizá alguien sepa otra alternativa mejor..... alguien sabe cómo????

Gracias.
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

RE:PROBLEMAS CON GROUP BY

Publicado por Isaias (5073 intervenciones) el 08/10/2008 23:29:56
Te falta el GROUP BY

GROUP BY EC.iCuenta

Y te aconsejo que utilices JOIN en lugar de mencionar las tablas y luego unirlas en el where.
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

RE:PROBLEMAS CON GROUP BY

Publicado por Liliana (5 intervenciones) el 09/10/2008 16:38:36
Esta consulta resulta exitosa...

SELECT EC.iCuenta AS Cuenta, SUM(A.mnyImporteDerecho) AS ImporteDerechos,
SUM(A.mnyImporteArt) AS ImporteImpuestos, ImporteTotal = SUM(A.mnyImporteDerecho + A.mnyImporteArt)
FROM TB_ActividadesLicencia A, TB_EnlaceCalificacion EC, TB_Licencia L
WHERE A.iCodLicencia = 41884 AND A.iCodLicencia = L.iCodLicencia AND A.iRelacion = EC.iRelacion GROUP BY EC.iCuenta

Pero cuando necesito condicionar (con CASE), es ahi donde me truena:

SELECT EC.iCuenta AS Cuenta, ImporteDerechos = (CASE WHEN A.smlLActividad > 100 THEN SUM(A.mnyImporteDerecho) ELSE 0 END),
ImporteImpuestos = (CASE WHEN A.smlLActividad > 100 THEN SUM(A.mnyImporteArt) ELSE 0 END)
FROM TB_ActividadesLicencia A, TB_EnlaceCalificacion EC, TB_Licencia L
WHERE A.iCodLicencia = 17416 AND A.iCodLicencia = L.iCodLicencia AND
A.iRelacion = EC.iRelacion GROUP BY EC.iCuenta

Column 'A.smlLActividad' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Alguien podria ayudarme??????? De antemano, gracias.
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

RE:PROBLEMAS CON GROUP BY

Publicado por Isaias (5073 intervenciones) el 10/10/2008 00:11:24
¿Y si colocas el CASE en el GROUP BY?

SELECT EC.iCuenta AS Cuenta, ImporteDerechos = (CASE WHEN A.smlLActividad > 100 THEN SUM(A.mnyImporteDerecho) ELSE 0 END),
ImporteImpuestos = (CASE WHEN A.smlLActividad > 100 THEN SUM(A.mnyImporteArt) ELSE 0 END)
FROM TB_ActividadesLicencia A, TB_EnlaceCalificacion EC, TB_Licencia L
WHERE A.iCodLicencia = 17416 AND A.iCodLicencia = L.iCodLicencia AND
A.iRelacion = EC.iRelacion GROUP BY EC.iCuenta, (CASE WHEN A.smlLActividad > 100 THEN SUM(A.mnyImporteArt) ELSE 0 END)
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

RE:PROBLEMAS CON GROUP BY

Publicado por Liliana (5 intervenciones) el 10/10/2008 18:11:24
NO, ME MARCA ERROR:
Cannot use an aggregate or a subquery in an expression used for the group by list of a GROUP BY clause
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

RE:PROBLEMAS CON GROUP BY

Publicado por Isaias (5073 intervenciones) el 10/10/2008 20:14:49
Hacer query's sin las tablas correspondientes, es todo un reto, checa si esta otra te sirve:

SELECT EC.iCuenta AS Cuenta, X.ImporteDerechos
FROM TB_ActividadesLicencia A JOIN (
SELECT iRelacion, ImporteDerechos = CASE WHEN A.smlLActividad > 100 THEN SUM(A.mnyImporteDerecho) ELSE 0 END,
ImporteImpuestos = CASE WHEN A.smlLActividad > 100 THEN SUM(A.mnyImporteArt) ELSE 0 END
FROM TB_ActividadesLicencia GROUP BY iRelacion
) AS X
ON A.iRelacion = X.iRelacion
JOIN TB_Licencia L ON A.iCodLicencia = 17416 AND A.iCodLicencia = L.iCodLicencia
GROUP BY EC.iCuenta
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

RE:PROBLEMAS CON GROUP BY

Publicado por Liliana (5 intervenciones) el 10/10/2008 22:02:52
Ya quedó:

SELECT Cuenta = EC.iCuenta, Importe = SUM(A.mnyImporteDerecho)
FROM TB_ActividadesLicencia A, TB_EnlaceCalificacion EC, TB_Licencia L
WHERE A.iCodLicencia = @iCodLicencia AND A.iRelacion = EC.iRelacion
AND A.iCodLicencia = L.iCodLicencia AND A.smlLActividad > 100 AND
A.mnyImporteDerecho > 0
GROUP BY EC.iCuenta


MUCHAS GRACIAS ISAIAS.
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

RE:PROBLEMAS CON GROUP BY

Publicado por Isaias (5073 intervenciones) el 15/10/2008 02:50:30
Gracias a ti por compartir tu solucion, que a muchos les pudiera servir, saludos
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

RE:PROBLEMAS CON GROUP BY

Publicado por Liliana (5 intervenciones) el 10/10/2008 20:07:11
Ya está resuelto:

SELECT EC.iCuenta AS Cuenta, ImporteDerechos = SUM(A.mnyImporteDerecho), ImporteImpuestos = SUM(A.mnyImporteArt)
FROM TB_ActividadesLicencia A, TB_EnlaceCalificacion EC, TB_Licencia L
WHERE A.iCodLicencia = @iCodLicencia AND A.iCodLicencia = L.iCodLicencia AND
A.iRelacion = EC.iRelacion AND A.smlLActividad > 100

Gracias.
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

RE:PROBLEMAS CON GROUP BY

Publicado por Isaias (5073 intervenciones) el 10/10/2008 20:16:10
Lo dicho, nadie sabe como estuvo el baile, si no fue invitado a la fiesta.

¿Y los CASE?

Saludos
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