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 31-03-2023
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
No veo el error en este query

Tengo una BB.DD. en FB 2.5 y con estas tres tablas:
Código SQL [-]
  • CREATE TABLE Partidos (CodPrv VARCHAR(3) DEFAULT '99' NOT NULL, Codigo SMALLINT NOT NULL, Nombre VARCHAR(45) NOT NULL, Sigla VARCHAR(10), Activo SMALLINT DEFAULT 1, Color INTEGER DEFAULT 0)
  • CREATE TABLE Resultados (CodPrv VARCHAR(3) DEFAULT '99' NOT NULL, Proceso INTEGER NOT NULL, Mesa INTEGER NOT NULL, Partido INTEGER DEFAULT 1 NOT NULL, Votos INTEGER DEFAULT 0)
  • CREATE TABLE NumElectos (CodPrv VARCHAR(3) DEFAULT '99' NOT NULL, Proceso INTEGER NOT NULL, Tipo VARCHAR(2) NOT NULL, Circunscripcion INTEGER DEFAULT 1 NOT NULL, Partido INTEGER DEFAULT 1 NOT NULL, Cargo INTEGER NOT NULL, Electos INTEGER NOT NULL)
Si ejecuto este query:
Código SQL [-]
SELECT SUM(A.Votos) Votos, B.Sigla, SUM(COALESCE(C.Electos, 0)) Electos,
       CASE WHEN B.Codigo = -3 THEN 2 WHEN B.Codigo = -1 THEN 1 WHEN B.Codigo = -2 THEN 0 ELSE 3 END Orden 
  FROM Partidos B, Resultados A
  LEFT JOIN NumElectos C ON A.CodPrv = C.CodPrv AND A.Proceso = C.Proceso AND A.Partido = C.Partido AND C.Tipo = 'J'
 WHERE A.CodPrv = :PrvIns 
   AND A.Proceso = :Proceso 
   AND A.Mesa IN (SELECT Codigo FROM Mesas WHERE CodPrv = A.CodPrv 
                     AND Municipio IN (SELECT Codigo FROM Poblacion WHERE CodPrv = A.CodPrv AND Cpostal STARTING :Cpostal)) 
   AND A.CodPrv = B.CodPrv AND A.Partido = B.Codigo
 GROUP BY Sigla, Orden ORDER BY Orden DESC, Electos DESC, Votos DESC
me da estos resultados (parte):
Cita:

VOTOS SIGLA ELECTOS ORDEN
981304 PSOE 11264 3
532962 PP 7020 3
pero si lo ejecuto así:
Código SQL [-]
SELECT SUM(A.Votos) Votos, B.Sigla,
       CASE WHEN B.Codigo = -3 THEN 2 WHEN B.Codigo = -1 THEN 1 WHEN B.Codigo = -2 THEN 0 ELSE 3 END Orden 
  FROM Partidos B, Resultados A
 WHERE A.CodPrv = :PrvIns 
   AND A.Proceso = :Proceso 
   AND A.Mesa IN (SELECT Codigo FROM Mesas WHERE CodPrv = A.CodPrv 
                     AND Municipio IN (SELECT Codigo FROM Poblacion WHERE CodPrv = A.CodPrv AND Cpostal STARTING :Cpostal)) 
   AND A.CodPrv = B.CodPrv AND A.Partido = B.Codigo
 GROUP BY Sigla, Orden ORDER BY Orden DESC, Votos DESC
el resultado es este otro:
Cita:

VOTOS SIGLA ORDEN
122663 PSOE 3
88827 PP 3
datos estos últimos que son los correctos y no entiendo por qué por el hecho de meter ese LEFT JOIN se obtiene diferente resultado.
Responder Con Cita
  #2  
Antiguo 31-03-2023
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
"LEFT JOIN" *puede* producir NULLS para el resultado del lado DERECHO para cuando no hay coincidencias, y eso aumenta las filas del IZQUIERDO.

Lo cual altera los resultados que hagas con eso.

Mira un diagrama de JOINS para comprender.
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 31-03-2023
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
Gracias. No se me había ocurrido. Haré un SELECT sin el SUM a ver que sale.
Responder Con Cita
  #4  
Antiguo 31-03-2023
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 mamcx Ver Mensaje
"LEFT JOIN" *puede* producir NULLS para el resultado del lado DERECHO para cuando no hay coincidencias, y eso aumenta las filas del IZQUIERDO.

Lo cual altera los resultados que hagas con eso.

Mira un diagrama de JOINS para comprender.
Le he quitado el LEFT JOIN, dejando el query así:
Código SQL [-]
SELECT SUM(A.Votos) Votos, B.Sigla, SUM(COALESCE(C.Electos, 0)) Electos,
       CASE WHEN B.Codigo = -3 THEN 2 WHEN B.Codigo = -1 THEN 1 WHEN B.Codigo = -2 THEN 0 ELSE 3 END Orden 
  FROM Partidos B, Resultados A, NumElectos C
etc.
y ahora sólo me da dos filas, lo que por otra parte es lógico ya que sólo dos partidos tienen datos en las tres columnas, pero me sigue sacando la burrada de antes de 11264 electos. Tiene que haber una solución.
Responder Con Cita
  #5  
Antiguo 31-03-2023
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 Angel.Matilla Ver Mensaje
Tengo una BB.DD. en FB 2.5 y con estas tres tablas:
Voy más allá: sólo sale mal la información de los valores que tiene datos para las tres columnas. Esta pantalla es cuando se ejecuta el primer query, el que da error:

y esta otra el del otro:

Como podéis ver, salvo las dos primeras filas, la información es la misma. No lo entiendo, es como si pasara más de una vez por esas filas. Yo sé que para el PSOE la suma en este caso han de ser 15 y pare el PP 10.
Responder Con Cita
  #6  
Antiguo 31-03-2023
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Hola

Falta la tabla mesas para poder ejecutar tu query.

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #7  
Antiguo 01-04-2023
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 egostar Ver Mensaje
Hola

Falta la tabla mesas para poder ejecutar tu query.

Saludos
Y también falta la tabla poblaciones. En el fichero adjunto al mensaje hay un script para crear y cargar las tablas. Los parámetros del query son estos:
  • PrvIns = "13"
  • Proceso = 40
  • Cpostal = "13"
Archivos Adjuntos
Tipo de Archivo: rar Script.rar (23,2 KB, 4 visitas)
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
Ayuda con este query steelha MySQL 4 06-03-2013 15:47:17
ayuda con este query Ledian_Fdez MS SQL Server 6 11-03-2010 07:24:11
Mirar por favor este query y comentar... El_Raso Firebird e Interbase 33 18-11-2008 12:53:44
¿Por qué me da este error?Error creating cursor manejador nuri SQL 2 01-08-2005 17:30:28
como quedaria el SQL para este Query?? JCarlos Conexión con bases de datos 2 15-11-2004 12:59:28


La franja horaria es GMT +2. Ahora son las 18:08:25.


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