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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-08-2018
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
SELECT muy complejo

Necesito hacer un SELECT pero la forma que se me ha ocurrido creo que es demasiado compleja y por lo tanto lenta; funciona bien pero quisiera, a ser posible, agilizar la ejecución del query. Ahora tengo esto, aunque es un poco monstruoso:
Código PHP:
SELECT 1COUNT(*), 'Sin cuenta' 
  
FROM Ls01 
 WHERE ForPago 
= :ForPago 
   
AND Iban '' 
 
UNION
SELECT 2
COUNT(*), 'Ctas. correctas' 
  
FROM Ls01 
 WHERE ForPago 
= :ForPago 
   
AND Iban <> '' 
   
AND SUBSTRING(Iban FROM 1 FOR 2IN (SELECT Codigo FROM Pais WHERE Codigo <> 'PD'
 
UNION 
SELECT 3
COUNT(*), 'Ctas. erróneas' 
  
FROM Ls01 
 WHERE ForPago 
=  :ForPago 
   
AND Iban <> '' 
   
AND SUBSTRING(Iban FROM 1 FOR 2NOT IN (SELECT Codigo FROM Pais
 
UNION 
SELECT 4
COUNT(*), 'Ctas. extranjero' 
  
FROM Ls01 
 WHERE ForPago 
= :ForPago 
   
AND Iban <> '' 
   
AND SUBSTRING(Iban FROM 1 FOR 2IN (SELECT Codigo FROM Pais WHERE Codigo NOT IN ('ES''PD')) 
    
ORDER BY 1 
</div>

Estaba pensando en hacer un SELECT...CASE, pero ninguna de las dos formas que he probado me funciona.
Este query:
Código PHP:
SELECT COUNT(*),
   CASE
     
WHEN Iban '' THEN 1
     WHEN Iban 
<> '' AND SUBSTRING(Iban FROM 1 FOR 2IN (SELECT Codigo FROM Pais WHERE Codigo <> 'PD'THEN 2
     WHEN Iban 
<> '' AND SUBSTRING(Iban FROM 1 FOR 2NOT IN (SELECT Codigo FROM PaisTHEN 3
     WHEN Iban 
<> '' AND SUBSTRING(Iban FROM 1 FOR 2IN (SELECT Codigo FROM Pais WHERE Codigo NOT IN ('ES''PD')) THEN 4
   END 
AS TipCue
  FROM Ls01
 WHERE ForPago 
= :ForPago
 GROUP BY 2 
al tratar de ejecutarlo me da este error
Cita:
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).
Y esta otra forma:
Código PHP:
SELECT COUNT(*)
  
FROM Ls01
 WHERE ForPago 
= :ForPago AND
   CASE
     
WHEN Iban '' THEN 1
     WHEN Iban 
<> '' AND SUBSTRING(Iban FROM 1 FOR 2IN (SELECT Codigo FROM Pais WHERE Codigo <> 'PD'THEN 2
     WHEN Iban 
<> '' AND SUBSTRING(Iban FROM 1 FOR 2NOT IN (SELECT Codigo FROM Pais WHERE Codigo <> 'PD'THEN 3
     WHEN Iban 
<> '' AND SUBSTRING(Iban FROM 1 FOR 2IN (SELECT Codigo FROM Pais WHERE Codigo NOT IN ('ES''PD')) THEN 4
   END 

me devuelve una única fila con valor 1. ¿Se puede hacer lo que pretendo?
Responder Con Cita
 



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
Problema matemático complejo DarkDudae Varios 4 21-03-2013 15:16:21
Buscador PHP, un poco mas complejo santiago14 PHP 4 25-08-2010 01:42:45
Manejo complejo de Strings MaMu OOP 5 14-10-2008 05:37:29
Imprimir un informe complejo Alexis7788 Impresión 1 02-11-2006 06:00:57
Como realizar un select complejo Nelly SQL 7 14-12-2005 01:14:53


La franja horaria es GMT +2. Ahora son las 17:26:02.


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