 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 06 Feb, 2018 5:44 pm Asunto: Querys con resultados incoherentes |
|
|
Estoy tratando de hacer una búsqueda para contra los registros que cumplen una determinada condición. Para probar he limitado la consulta a un único tipo de registro.
Tengo dos querys (ninguno de ellos es sencillo):
| Código: | SELECT DISTINCT A.Codigo, C.Nombre, D.Literal, E.Literal
FROM Persona A
LEFT JOIN Recibos B ON A.CodPrv = B.CodPrv AND A.Codigo = B.Codigo
LEFT JOIN Instalacion D ON D.Etiqueta = 'Situacion' AND A.Situacion = D.Valor
LEFT JOIN Instalacion E ON E.Etiqueta = 'ForPago' AND A.ForPago = E.Valor, Junta C
WHERE A.Situacion IN (SELECT Valor FROM Instalacion WHERE Etiqueta = 'Situacion' AND Situacion = 1)
AND A.Cuota > 0
AND A.ForPago IN (SELECT Valor FROM Instalacion WHERE Etiqueta = 'ForPago' AND Literal = 'Banco')
AND A.PerPago = (SELECT Valor FROM Instalacion WHERE Etiqueta = 'PerPago' AND Literal = 'Anual')
AND A.Codigo NOT IN (SELECT Codigo FROM Emision)
AND A.CodPrv = C.CodPrv AND A.Junta = C.Codigo AND C.Nombre = 'CIUDAD REAL'
ORDER BY 2,3,4,1 |
Si ejecuto este query me devuelve 55 filas, que es lo que ha de ser. Pero si lo ejecuto así:
| Código: | SELECT DISTINCT COUNT(A.Codigo), C.Nombre, D.Literal, E.Literal
FROM Persona A
LEFT JOIN Recibos B ON A.CodPrv = B.CodPrv AND A.Codigo = B.Codigo
LEFT JOIN Instalacion D ON D.Etiqueta = 'Situacion' AND A.Situacion = D.Valor
LEFT JOIN Instalacion E ON E.Etiqueta = 'ForPago' AND A.ForPago = E.Valor, Junta C
WHERE A.Situacion IN (SELECT Valor FROM Instalacion WHERE Etiqueta = 'Situacion' AND Situacion = 1)
AND A.Cuota > 0
AND A.ForPago IN (SELECT Valor FROM Instalacion WHERE Etiqueta = 'ForPago' AND Literal = 'Banco')
AND A.PerPago = (SELECT Valor FROM Instalacion WHERE Etiqueta = 'PerPago' AND Literal = 'Anual')
AND A.Codigo NOT IN (SELECT Codigo FROM Emision)
AND A.CodPrv = C.CodPrv AND A.Junta = C.Codigo AND C.Nombre = 'CIUDAD REAL'
GROUP BY 2,3,4
ORDER BY 2,3,4 |
La columna del COUNT me devuelve como resultado 412, que es de todo punto incorrecto.
Entiendo que si las condiciones son las mismas en ambas consultas el resultado debería ser el mismo, es decir que el COUNT me devolviera 55. Ya no sé que hacer para tratar de aislar el error que estoy cometiendo; me interesaría el segundo método, con un COUNT, porque es para mostrar un resultado resumen en pantalla y poder hacer unos procesos después en función de la selección del usuario. Si alguno quiere echarme una mano le puedo pasar la base de datos en FB 2.5; va por delante que el fichero comprimido ocupa más de 320 KB. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 06 Feb, 2018 5:54 pm Asunto: |
|
|
Estaba hurgando en la consulta, tratando de encontrar por qué no me da el mismo resultado. Bien: he eliminado columnas de ambas y descubierto una cosa.
Si pongo así el query:
| Código: | SELECT DISTINCT A.Codigo... etc. |
pero sin eliiminar ninguna de las condiciones de la misma me devuelve las 55 filas que debe. Pero si pongo:
| Código: | SELECT DISTINCT COUNT(A.Codigo)... etc. |
entonces me devuelve 412 en ese COUNT.
Dicho esto, acabo de descubrir que DISTINCT puede meterse dentro del COUNT y yo estaba convencido que no; es decir:
| Código: | SELECT COUNT(DISTINCT A.Codigo)... etc. |
Cada día se aprende algo nuevo. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|