Ver Mensaje Individual
  #4  
Antiguo 22-08-2018
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Reputación: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Supongo que es un fallo de Firebird... el problema está en los select de pais dentro del WHEN.
Si lo sustituyes por "IN ('PD', 'ES', ...)" funcinoa correctamente.
Para evitar esto selects, lo he unido a pais mediante LEFT JOIN

A diferencia del UNION, solo te saldrá un error por cada cuenta. Con el UNION podría aparecer dentro de dos registros distintos.
En el caso del CASE, por ejemplo nunca dirá que es una cuenta de Extranjero porque ya devuelve un registro como "Cuenta correcta".

He agregado un ELSE, por si no entra en ninguna condición...

Prueba con lo siguiente:
Código SQL [-]
SELECT COUNT(*),
   CASE
     WHEN Iban = '' THEN 'Cuenta Vacia'
     WHEN Iban <> '' AND p.Codigo <> 'PD' THEN 'Cta. correcta'
     WHEN Iban <> '' AND p.Codigo is NULL THEN 'Pais erroneo'
     WHEN Iban <> '' AND p.Codigo NOT IN ('ES', 'PD') THEN 'Cuentas Extranjero'
     ELSE 'Error desconocido'
   END AS TipCue
  FROM Ls01 l
  left join pais p on SUBSTRING(l.Iban FROM 1 FOR 2) = p.codigo
 WHERE l.ForPago = :ForPago
 GROUP BY 2
Responder Con Cita