Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con consulta SQL (https://www.clubdelphi.com/foros/showthread.php?t=78339)

cmfab 10-04-2012 20:05:09

Ayuda con consulta SQL
 
Hola a todos, tengo dos tablas en una Base de datos MySQL (tabla 1, tabla 2) en la tabla 1 tengo por ejemplo un campo denominado importe y en la tabla 2 tengo otros campos necesarios, ambas tablas se enlazan por un campoID, lo que necesito es que la consulta me devuelva el importe total de la tabla 1 y que me muestre tambien los campos del detalle almacenado en la tabla 2, pero lo que sucede en mi codigo SQL es que me esta duplicando el importe por cada item de coincidencia en la tabla 2. estoy usando la siguiente instruccion.

Código SQL [-]
SELECT  Sum(Tabla1.Importe) AS Importetotal, Tabla2.Campo1, Tabla2.Campo2 FROM Tabla1, Tabla2
Where Tabla1.docID = Tabla2.docID
GROUP BY Tabla1.docexterno

Gracias de antemano

Caral 10-04-2012 20:30:00

Hola
Son dos campos en la tabla2, lo veo dificil, tal vez asi:
Código SQL [-]
SELECT  Sum(Tabla1.Importe) AS Importetotal 
(Select Tabla2.Campo1, Tabla2.Campo2 FROM Tabla2)
FROM Tabla1 Where Tabla1.docID = Tabla2.docID
GROUP BY Tabla1.docexterno

Saludos

cmfab 10-04-2012 20:55:42

Gracias por la respuesta, pero no funciona, debo aclarar que me confundi en la calusula Group By, seria esta:

Código SQL [-]
Group By Tabla1.docID

Casimiro Notevi 10-04-2012 20:58:29

Describe las tablas y campos y lo que quieres obtener :)

Caral 10-04-2012 21:06:47

Hola

Código SQL [-]
SELECT DISTINCT Tabla2.Campo1, Tabla2.Campo2, Sum(Tabla1.Importe) AS Importetotal
FROM Tabla1 INNER JOIN Tabla2 ON Tabla1.campoID = Tabla2.campoID
GROUP BY Tabla2.Campo1, Tabla2.Campo2

Saludos

Edito:
Como se esta duplicando el dato de la suma se necesita hacer una distincion de los campos de la tabla 2.
Lo he probado y NO duplica la suma.

cmfab 10-04-2012 21:36:01

Gracias por su interes, pero sigue sin funcionar, lo explico mejor:

en la tabla 2 tengo tres campos: campo1 y campo2 y campoID (por ejemplo en ella solo tengo dos registros)

en la tabla 1 tengo dos campos: campo ID e Importe (en esta tabla para realizar la prueba tengo por ejemplo 4 registros con sus importes ),

osea que el campoID lo tenemos en dos registros de tabla 2 y en 4 registros de tabla 1. lo que necesito es que me totalice el importe de tabla 1

pero que me muestre campo1 y campo2 de tabla 2, que son datos iguales para ambos registros de esta tabla.

Lo que esta sucediendo es que el total del importe que esta en tabla 1 me lo esta multiplicando por 2 ( osea lo multiplica por el total de registros en tabla 2 )

Espero se entienda mejor

Gracias una vez mas

Caral 10-04-2012 21:38:57

Hola
No puede ser, no sera que lo esta presentando dos veces igual ?.
Otra cosa adicional, si hay registros diferentes en los campos de la tabla 2 los presentara si o si.
Saludos

cmfab 10-04-2012 21:56:18

hola, será que vos lo probastes así como digo 4 registros en tabla1 y dos en tabla 2 por ejemplo ??

Caral 10-04-2012 22:00:23

Hola
Aqui te dejo un ejemplo EXACTO a lo que me dices.
Tabla 1 con 2 campos y tres datos
Tabla 2 con tres campos y datos.
Lo hice en access para que lo veas fácilmente, puede abrir la tabla, modificar los datos y probar.
Si ejecutas el programa veras que solo hay una linea y la suma la hace correctamente.
Saludos

cmfab 10-04-2012 22:16:01

Gracias por tu paciencia, pero nunca he descargado un archivo por esta via, pero veo que en el compactado hay un solo arhivo sin extencion ni nada. o es que no lo estoy haciendo correctamente

Caral 10-04-2012 22:18:15

Hola
Es un ZIP, osea compactado.
Windows lo descompacta o hay varios programas para hacerlo.
Creo que con darle click derecho te da la opción.
Saludos

cmfab 10-04-2012 22:25:39

Si eso lo entiendo, gracias yo tengo WinRar y le doy click derecho y lo extraigo, pero me extrae un saolo archvio suma campos (36 KB), sin extension ni nada, no reconocido por Windows, por eso la pregunta, si es que falta algo mas para abrirlo

Caral 10-04-2012 22:29:13

Hola
Yo lo he bajado para revisarlo y dentro esta la carpeta que contiene los archivos del ejemplo y la BD.
Vuelve a bajarlo, tal vez tuvo algun problema.
Si no dime y te lo envío por correo no hay problema.
Saludos

cmfab 10-04-2012 22:31:01

si seria mejor si me lo envias al correo, despues os comento como me fue

Gracias

Caral 10-04-2012 22:39:34

Hola
Ya lo envié.
Por favor a algun Moderador quitar el correo de cmfab para que no tenga problemas.
Gracias.
Salidos

cmfab 10-04-2012 22:45:21

Probado, voy a revisar porque no funciona en MySQL, es extraño

un saludo grande !!!

ecfisa 10-04-2012 23:53:12

Hola cmfab.

Tál como sugirió Caral (para tu beneficio), quité tu dirección de correo electrónico para que no te llenen de spam. Si aún así deseas publicarlo avísame por mensaje privado y lo agrego al mensaje nuevamente.

Saludos.

cmfab 11-04-2012 13:22:42

Hola Caral, vuelvo a retomar el tema, no funciona el ejemplo, fijate bien como puse mas arriba el ejemplo. si agregas otro registro en tabla2, veras que te duplica el importe, osea que es lo que te decia, esta multipilcando la suma del importe en tabla1 por la cantidad de registros en tabla2. como en tu ejemplo solo tenes un registro en tabla2 funciona bien, pero si agregas otro veras la diferencia.

un saludo, grande a todos !!!!

cmfab 11-04-2012 13:23:37

Gracias ecfisa,

Caral 11-04-2012 15:18:03

Hola
No te entiendo.
Puse mas datos en la tabla 2 para ver y no me duplica el total, solo lo muestra en cada linea, que es logico por ser una sola sentencia para un dbgrid.

Estos datos puse en la tabla 2:

CampoID......Campo1....Campo2
1...............nada......... no
1...............otro.......... si
2...............est........... es

y esto en la tabla 1:

CampoID.......Importe
1.................2
1.................4
1.................5
2.................10

Esto presenta el dbgrid:

Campo1............Campo2............Importe
est.................. es....................10
nada................no....................11
otro.................si.....................11

Como ves no suma los totales, lo que si hace es presentarlos dos veces en el caso de que un campoID se duplique.
Esto lo dije antes: Es logico ya que se trata de una presentacion en dbgrid y llenara las celdas con informacion.

No se si estoy entendiendo mal.
Saludos


La franja horaria es GMT +2. Ahora son las 08:36:52.

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