Ver Mensaje Individual
  #5  
Antiguo 19-10-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
Sigo estrellándome una y otra vez. A ver si me ayudáis a ver que está mal porque yo soy incapaz. Tengo este query:
Código SQL [-]
SELECT DISTINCT A.Codigo, A.Nombre, CAST(RDB$GET_CONTEXT('USER_TRANSACTION', 'VOTOSPAR') AS INTEGER) Votos, 
       COALESCE(C.Electos, 0) Electos, CAST(RDB$GET_CONTEXT('USER_TRANSACTION', 'VOTOSTOT') AS INTEGER) Total,
       RDB$SET_CONTEXT('USER_TRANSACTION', 'VOTOSPAR', (SELECT SUM(Votos) FROM Resultados WHERE CodPrv = A.CodPrv 
                       AND Proceso = B.Proceso 
                       AND Partido = A.Codigo
                       AND Mesa IN (SELECT Codigo FROM Mesas WHERE CodPrv = A.CodPrv AND Municipio = 1217))),
       RDB$SET_CONTEXT('USER_TRANSACTION', 'VOTOSTOT', (SELECT SUM(Votos) FROM Resultados WHERE CodPrv = A.CodPrv 
                       AND Proceso = B.Proceso 
                       AND (Partido > 0 OR Partido = (SELECT Codigo FROM Partidos WHERE CodPrv = A.CodPrv AND Sigla = 'BLANCOS'))
                       AND Mesa IN (SELECT Codigo FROM Mesas WHERE CodPrv = A.CodPrv AND Municipio = 1217)))
  FROM Partidos A, Resultados B
  LEFT JOIN NumElectos C ON B.CodPrv = C.CodPrv AND B.Proceso = C.Proceso AND C.Tipo = 'M' AND C.Circunscripcion = 1217 AND B.Partido = C.Partido
 WHERE A.CodPrv = '13' AND A.Codigo > 0
   AND B.Proceso = 42 AND A.CodPrv = B.CodPrv AND B.Partido = A.Codigo
   AND B.Mesa IN (SELECT Codigo FROM Mesas WHERE CodPrv = A.CodPrv AND Municipio = 1217)
 ORDER BY Votos DESC, Electos DESC, Nombre
Así, tal cual, da este resultado:

Primero que nada que no entiendo por qué aparece tres veces el primer registro si todos los datos son iguales; eso ya me ha dejado perplejo. Además, y de acuerdo con el query, las tres últimas filas están mal ordenadas.

Si al query le añado la sintaxis que me sugirió duilioisola, así:
Código SQL [-]
SELECT DISTINCT A.Codigo, A.Nombre, CAST(RDB$GET_CONTEXT('USER_TRANSACTION', 'VOTOSPAR') AS INTEGER) Votos, 
       COALESCE(C.Electos, 0) Electos, CAST(RDB$GET_CONTEXT('USER_TRANSACTION', 'VOTOSTOT') AS INTEGER) Total,
       RDB$SET_CONTEXT('USER_TRANSACTION', 'VOTOSPAR', (SELECT SUM(Votos) FROM Resultados WHERE CodPrv = A.CodPrv 
                       AND Proceso = B.Proceso 
                       AND Partido = A.Codigo
                       AND Mesa IN (SELECT Codigo FROM Mesas WHERE CodPrv = A.CodPrv AND Municipio = 1217))),
       RDB$SET_CONTEXT('USER_TRANSACTION', 'VOTOSTOT', (SELECT SUM(Votos) FROM Resultados WHERE CodPrv = A.CodPrv 
                       AND Proceso = B.Proceso 
                       AND (Partido > 0 OR Partido = (SELECT Codigo FROM Partidos WHERE CodPrv = A.CodPrv AND Sigla = 'BLANCOS'))
                       AND Mesa IN (SELECT Codigo FROM Mesas WHERE CodPrv = A.CodPrv AND Municipio = 1217)))
  FROM Partidos A, Resultados B
  LEFT JOIN NumElectos C ON B.CodPrv = C.CodPrv AND B.Proceso = C.Proceso AND C.Tipo = 'M' AND C.Circunscripcion = 1217 
            AND B.Partido = C.Partido
 WHERE A.CodPrv = '13' AND A.Codigo > 0
   AND B.Proceso = 42 AND A.CodPrv = B.CodPrv AND B.Partido = A.Codigo
   AND B.Mesa IN (SELECT Codigo FROM Mesas WHERE CodPrv = A.CodPrv AND Municipio = 1217)
   AND CAST(RDB$GET_CONTEXT('USER_TRANSACTION', 'VOTOSPAR') AS DOUBLE PRECISION) >= 5 * CAST(RDB$GET_CONTEXT('USER_TRANSACTION', 'VOTOSTOT') AS DOUBLE PRECISION) / 100
 ORDER BY Votos DESC, Electos DESC, Nombre
Entonces no me devuelve nada y lo que tendría que mostrar son aquellos registros en los que los votos sean iguales o mayores que el 5% del total (796); es decir: las tres últimas filas no deberíanb mostrarse.
Responder Con Cita