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 08-06-2020
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.354
Poder: 19
Angel.Matilla Va por buen camino
Select List

En una base de datos en Firebird, ¿se puede hacer un SELECT LIST sobre una suma?
Código SQL [-]
SELECT LIST(SUM(A.Total))...
si se puede, ¿cómo?
Responder Con Cita
  #2  
Antiguo 08-06-2020
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.264
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pero sum() devuelve un solo valor, no puede ser una lista.
Responder Con Cita
  #3  
Antiguo 08-06-2020
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.354
Poder: 19
Angel.Matilla Va por buen camino
Unhappy

¡Qué vergüenza! Ahora me he dado cuenta de que he hecho mal la pregunta. Efectivamente mi pregunta anterior es completamente absurda.
Responder Con Cita
  #4  
Antiguo 08-06-2020
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.264
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cualquiera se equivoca, no hay vergüenza. Hasta yo mismo puedo equivocarme alguna vez
Responder Con Cita
  #5  
Antiguo 08-06-2020
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.354
Poder: 19
Angel.Matilla Va por buen camino
Gracias. A ver si ahora me explico mejor.

Tengo este query:
Código SQL [-]
SELECT SUM(A.Votos), C.Sigla, D.Electos, CASE WHEN C.Codigo < 0 THEN C.Codigo ELSE 1 END, B.Municipio
  FROM Resultados A, Mesas B, Partidos C, NumElectos D 
 WHERE A.CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta = 'Provincia') 
   AND A.Proceso = (SELECT MAX(Codigo) FROM Elecciones WHERE CodPrv = A.CodPrv
                       AND Proceso = (SELECT Codigo FROM Proceso WHERE CodPrv = A.CodPrv AND Nombre = 'MUNICIPALES') AND Cerrado = 1) 
   AND A.CodPrv = B.CodPrv AND A.Mesa = B.Codigo
   AND A.CodPrv = C.CodPrv AND A.Partido = C.Codigo 
   AND A.CodPrv = D.CodPrv AND D.Tipo = 'J' AND B.Municipio = D.Circunscripcion AND A.Partido = D.Partido 
 GROUP BY 2, 3, 4, 5
 ORDER BY 5, 4 DESC, 3 DESC, 1 DESC
que genera una salida como esta

y me haría falta que la salida fuera más o menos así:
Cita:
PP 611 6,PSOE 472 3, 175
PP 376 5,PSOE 398 3, OTROS 356 1, 686
etc.
siendo el primer trozo la sigla, el segundo los votos y el tercero los electos. Y no se me ocurre cómo porque si pongo
Código SQL [-]
SELECT LIST(C.Sigla||' '||SUM(A.Votos)||' ' ||B.Municipio)...
me da este error:
Código:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Nested aggregate functions are not allowed.
Que entiendo indica que no se puede meter una función de este tipo (SUM, COUNT, etc.) dentro de un LIST.
Responder Con Cita
  #6  
Antiguo 08-06-2020
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 933
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Bueno, tendría que ser así mas o menos...

Código SQL [-]
SELECT LIST(Sigla||' '||Suma||Electos,',')
FROM 
    (SELECT SUM(A.Votos) as Suma, C.Sigla, D.Electos, CASE WHEN C.Codigo < 0 THEN C.Codigo ELSE 1 END, B.Municipio
     FROM Resultados A, Mesas B, Partidos C, NumElectos D 
     WHERE A.CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta = 'Provincia') 
   AND A.Proceso = (SELECT MAX(Codigo) FROM Elecciones WHERE CodPrv = A.CodPrv
                       AND Proceso = (SELECT Codigo FROM Proceso WHERE CodPrv = A.CodPrv AND Nombre = 'MUNICIPALES') AND Cerrado = 1) 
   AND A.CodPrv = B.CodPrv AND A.Mesa = B.Codigo
   AND A.CodPrv = C.CodPrv AND A.Partido = C.Codigo 
   AND A.CodPrv = D.CodPrv AND D.Tipo = 'J' AND B.Municipio = D.Circunscripcion AND A.Partido = D.Partido 
 GROUP BY 2, 3, 4, 5
 ORDER BY 5, 4 DESC, 3 DESC, 1 DESC)

Saludos cordiales
Responder Con Cita
  #7  
Antiguo 08-06-2020
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.354
Poder: 19
Angel.Matilla Va por buen camino
Gracias por la idea. Mañana mismo lo probaré.
Responder Con Cita
  #8  
Antiguo 09-06-2020
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.354
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por cloayza Ver Mensaje
Bueno, tendría que ser así mas o menos...
¡Perfecto! Es exactamente lo que me hacía falta. Ahora tengo que ver como lo encajo en el programa.
Responder Con Cita
  #9  
Antiguo 09-06-2020
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.354
Poder: 19
Angel.Matilla Va por buen camino
Vale. Ya he conseguido meterlo dentro de otro query bastante más bestia que me hace falta para generar un informe pero me surge otro problema y es que algunos de los parámetros están referidos a alguna de las columnas de ese query. Sé que esto es una burrada, pero no se me ocurre una forma mejor de hacerlo.
Código SQL [-]
SELECT A.Codigo, A.Municipio, A.Actualiza, A.Partido, A.Comarca, A.Padron, A.Concejales, A.Censo, 
       A.Relacion, A.Proceso, A.F_proceso, A.Nombre_alcalde, A.Partido_alcalde, A.Junta, A.Afiliados, 
       A.RatAfi, A.Constitucion, A.Sede, A.TlfSede, A.Presidente, A.Portavoz, A.LisCon, A.U_municipal,
       A.Observaciones, CASE WHEN A.CodPro = A.U_municipal THEN 1 ELSE 0 END Ultima, 
       SUM(B.Votos) Votos, LIST(H.Sigla||' '||H.Suma||' '||H.Electos)
  FROM Dl01 A, Resultados B, Mesas C,
       (SELECT SUM(D.Votos) Suma, F.Sigla, G.Electos, CASE WHEN F.Codigo < 0 THEN F.Codigo ELSE 1 END Orden
        FROM Resultados D, Mesas E, Partidos F, NumElectos G 
       WHERE D.CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta = 'Provincia') 
         AND D.Proceso = :Proceso
         AND D.CodPrv = E.CodPrv AND D.Mesa = E.Codigo 
         AND E.Municipio = :Municipio
         AND D.CodPrv = F.CodPrv AND D.Partido = F.Codigo 
         AND D.CodPrv = G.CodPrv AND G.Tipo = 'J' AND G.Circunscripcion = E.Municipio 
         AND D.Partido = G.Partido 
       GROUP BY 2, 3, 4 
       ORDER BY 4 DESC, 3 DESC, 1 DESC) H
 WHERE A.CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta = 'Provincia') 
   AND A.CodPro = (SELECT MAX(Codigo) FROM Elecciones WHERE CodPrv = A.CodPrv) 
   AND A.Codigo IN (SELECT Municipio FROM Junta WHERE CodPrv = A.CodPrv AND Zona = 15) 
   AND B.CodPrv = A.CodPrv AND B.Proceso = A.CodPro AND C.CodPrv = A.CodPrv AND B.Mesa = C.Codigo 
   AND C.Municipio = A.Codigo 
 GROUP BY A.Codigo, A.Municipio, A.Actualiza, A.Partido, A.Comarca, A.Padron, A.Concejales, A.Censo, 
          A.Relacion, A.Proceso, A.F_proceso, A.Nombre_alcalde, A.Partido_alcalde, A.Junta, 
          A.Afiliados, A.RatAfi, A.Constitucion, A.Sede, A.TlfSede, A.Presidente, A.Portavoz, 
          A.LisCon, A.U_municipal, A.Observaciones, Ultima
 ORDER BY Municipio
¿Cómo puedo referenciar en el SELECT que hay dentro del FROM, el que me sugirió cloayza (en azul), que ese D.Proceso es el mismo valor que A.U_municipal y que E.Municipio vale lo mismo que A.Codigo?

Última edición por Angel.Matilla fecha: 09-06-2020 a las 12:34:30.
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
Utilizar un valor de un Select dentro de otro Select gluglu SQL 6 15-04-2011 15:22:36
Problema conuna consulta select...not in (select ...) VRO Firebird e Interbase 2 11-08-2005 09:56:35
5 select de 5 tablas diferentes en un select solo sakuragi SQL 6 15-06-2005 19:57:06
Select anidado: Select from (select....) Malon SQL 2 14-10-2004 15:01:24
Select anidado ( Select from select ) Malon Firebird e Interbase 1 05-10-2004 05:14:38


La franja horaria es GMT +2. Ahora son las 20:00:48.


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