Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-05-2022
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Select con COUNT y SUM no me funciona

Hace tiempo planteé un duda similar a la que tengo ahora y pensé que adaptando el código que distéis en su momento podría valerme, pero no he sido capaz.

Tengo este query sobre una vista de FB 2.5.6:
Código SQL [-]
SELECT COUNT(DISTINCT Codigo) Recibos, Periodo, Forma, Municipio
  FROM Rc03 
 WHERE PerPago = 2
   AND ForPago IN (2,4)
 GROUP BY PerPago, Periodo, ForPago, Forma, Junta, NomJunta
 ORDER BY PerPago, Forma, NomJunta
que me da este resultado:

Yo sé que el importe de esos dos registros es de 150€, pero si en el query añado el SUM así:
Código SQL [-]
SELECT COUNT(DISTINCT Codigo) Recibos, SUM(Cuota) Importe, Periodo, Forma, Municipio
  FROM Rc03 
 WHERE PerPago = 2
   AND ForPago IN (2,4)
 GROUP BY PerPago, Periodo, ForPago, Forma, Junta, NomJunta
 ORDER BY PerPago, Forma, NomJunta
lo que salees esto:

y no sé como hacer para que me dé ese resultado.
He intentado haciendo un subselect:
Código SQL [-]
SELECT COUNT(DISTINCT A.Codigo) Recibos, A.Periodo, A.Forma, A.NomJunta,
       (SELECT SUM(Cuota) FROM Cuotas WHERE Codigo = A.Codigo)
  FROM Rc03 A
 WHERE A.PerPago = 2
   AND A.ForPago IN (2,4)
 GROUP BY A.PerPago, A.Periodo, A.ForPago, A.Forma, A.Junta, A.NomJunta
 ORDER BY PerPago, Forma, NomJunta
ya que el importe que hay que sumar está en esa tabla CUOTAS y el campo código es el que relaciona ambas tablas, pero al tratar de ejecutar el query me da un error:
Cita:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).
y no se me ocurre como solucionarlo.

También he probado esto otro:
Código SQL [-]
SELECT A.Periodo, A.Forma, A.NomJunta,
       (SELECT COUNT(Codigo) FROM Persona WHERE Codigo = A.Codigo),
       (SELECT SUM(Cuota) FROM Cuotas WHERE Codigo = A.Codigo)
  FROM Rc03 A
 WHERE A.PerPago = 2
   AND A.ForPago IN (2,4)
 GROUP BY A.PerPago, A.Periodo, A.ForPago, A.Forma, A.Junta, A.NomJunta
 ORDER BY PerPago, Forma, NomJunta
ya que el campo CODIGO es parte de la clave primaria de esa tabla PERSONA y por lo tanto no está repetido, pero me da el mismo error.
Responder Con Cita
  #2  
Antiguo 11-05-2022
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
¿Y la primera te funciona en Firebird?
Yo tenía entendido que en la cláusula group by tienen que estar listados todos los campos del select con valores no agrupados (los que no tienen, sum, count...). Supongo que los pones porque están dentro del where.

En todo caso el error es referido a eso, que has añadido una columna y no la incluyes en el group by.
Responder Con Cita
  #3  
Antiguo 11-05-2022
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Estimado Angel.Matilla

Creo que el problema de la suma de importe, puede deberse a los datos que te entrega la vista. Ya que la suma la realiza sobre ese dataset...

Podrías compartir el código SQL de la vista que utilizas...

Saludos cordiales
Responder Con Cita
  #4  
Antiguo 11-05-2022
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por kuan-yiu Ver Mensaje
¿Y la primera te funciona en Firebird?
Yo tenía entendido que en la cláusula group by tienen que estar listados todos los campos del select con valores no agrupados (los que no tienen, sum, count...). Supongo que los pones porque están dentro del where.

En todo caso el error es referido a eso, que has añadido una columna y no la incluyes en el group by.
Lo del group by que comentas también me ha sorprendido a mi. Tanto en el programa BUilder como en SQLManager si lo pongo como está funciona y si quito los campos que no están en el SELECT me da error. No lo entiendo yo tampoco.
Cita:
Empezado por cloayza Ver Mensaje
Estimado Angel.Matilla

Creo que el problema de la suma de importe, puede deberse a los datos que te entrega la vista. Ya que la suma la realiza sobre ese dataset...

Podrías compartir el código SQL de la vista que utilizas...

Saludos cordiales
Pero no quiero protestas porque sea muy complejo
Código SQL [-]
CREATE VIEW Rc03 (CodPrv, Codigo, Junta, ForPago, PerPago, Cuota, F_alta, Fecha, Situacion, Forma, Periodo, NomJunta) AS
SELECT A.CodPrv, A.Codigo, A. Junta, A.ForPago, A.PerPago, B.Cuota, A.F_alta, C.Fecha, D.Literal, E.Literal, F.Literal, G.Nombre 
  FROM Persona A 
  LEFT JOIN Cuotas B ON A.CodPrv = B.CodPrv AND A.Codigo = B.Codigo AND B.Tipo = 'A' 
  LEFT JOIN Recibos C ON A.CodPrv = C.CodPrv AND A.Codigo = C.Codigo 
  LEFT JOIN Instalacion D ON D.Etiqueta = 'Situacion' AND A.Situacion = D.Valor
  LEFT JOIN Instalacion E ON E.Etiqueta = 'ForPago' AND A.ForPago = E.Valor
  LEFT JOIN Instalacion F ON F.Etiqueta = 'PerPago' AND A.PerPago = F.Valor, Junta G 
 WHERE B.Cuota > 0 
   AND A.Situacion IN (SELECT Valor FROM Instalacion WHERE Etiqueta = 'Situacion' AND Situacion = 1) 
   AND A.ForPago IN (SELECT Valor FROM Instalacion WHERE Etiqueta = 'ForPago') 
   AND A.PerPago IN (SELECT Valor FROM Instalacion WHERE Etiqueta = 'PerPago') 
   AND A.Codigo NOT IN (SELECT Codigo FROM Emision) 
   AND A.CodPrv = G.CodPrv AND A.Junta = G.Codigo
Es el código que crea la vista
Responder Con Cita
  #5  
Antiguo 11-05-2022
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Pero y los datos originales?
__________________
El malabarista.
Responder Con Cita
  #6  
Antiguo 11-05-2022
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Esto sería una muestra del SELECT completo de la vista (en total salen como 22000 registros sin poner filtros). No sé si te refieres a esto.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
SELECT con SUM y COUNT Angel.Matilla Firebird e Interbase 18 13-06-2018 10:19:36
¿Select count sin group by? zazexx SQL 5 07-08-2008 15:27:11
Mejorar SELECT COUNT ferjavrec2 SQL 0 01-06-2007 21:00:00
valor de SELECT COUNT maruenda SQL 15 25-05-2007 22:58:38
Select Count (distinct X) lunatiko SQL 2 17-10-2004 21:06:45


La franja horaria es GMT +2. Ahora son las 21:13:00.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi