Ver Mensaje Individual
  #3  
Antiguo 10-05-2019
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Reputación: 21
mRoman Va por buen camino
Cita:
Empezado por Angel.Matilla Ver Mensaje
¿Puede hacerse un query con un campo calculado en función de otro también calculado?
A ver si me explico mejor. Me interesa sacar un query de este estilo:
Código SQL [-]
SELECT A.Municipio, B.Nombre, F.Padron,
(SELECT COUNT(*) FROM Persona
WHERE CodPrv = A.CodPrv AND Junta = C.Codigo AND Situacion IN (SELECT Valor FROM Instalacion WHERE Etiqueta = 'Situacion'
AND Situacion = 1)) Afiliados, 
CASE WHEN F.Padron = 0 THEN 0 ELSE 100 * Afiliados / F.Padron END
FROM DatLoc A, HisElec F
WHERE A.Municipio = F.Municipio
AND A.Municipio = 1217
Pero al ejecutar el CASE, lógicamente, me da un error:

¿Como podría montarse el query para que ese CASE llegara a ejecutarse?
No le falta "AS" entre el último paréntesis y el campo "Afiliados"??
Código SQL [-]
WHERE CodPrv = A.CodPrv AND Junta = C.Codigo AND Situacion IN (SELECT Valor FROM Instalacion WHERE Etiqueta = 'Situacion'
AND Situacion = 1)) as Afiliados,

Y la parte del ELSE, no aplica la cuestión algebraica:
Código SQL [-]
100 * Afiliados / F.Padron
(100 * Afiliados ) / F.Padron 
/*En el camino de la informática olvide que los operadores aritméticos, llevan prioridad?...mmm...no recuerdo ya mis inicios!!!*/

Ahora que lo reescribo...veo que deberias agregar nuevamente toda la sentencia que calcula a "Afiliados", quedaría algo así:
Código SQL [-]
SELECT A.Municipio, B.Nombre, F.Padron,
(SELECT COUNT(*) FROM Persona
WHERE CodPrv = A.CodPrv AND Junta = C.Codigo AND Situacion IN (SELECT Valor FROM Instalacion WHERE Etiqueta = 'Situacion'
AND Situacion = 1)) Afiliados,
CASE WHEN F.Padron = 0 THEN 0 ELSE ( 100 * (SELECT COUNT(*) 
                                         FROM Persona
                                         WHERE CodPrv = A.CodPrv
                                             AND Junta = C.Codigo 
                                             AND Situacion IN (SELECT Valor 
                                                               FROM Instalacion 
                                                               WHERE Etiqueta = 'Situacion'
                                                                   AND Situacion = 1))
                                    ) / F.Padron END
FROM DatLoc A, HisElec F
WHERE A.Municipio = F.Municipio
AND A.Municipio = 1217

Prueba el Query y nos comentas....

Saludos.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!

Última edición por mRoman fecha: 10-05-2019 a las 16:29:15.
Responder Con Cita