Ver Mensaje Individual
  #1  
Antiguo 31-03-2023
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Reputación: 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