PDA

Ver la Versión Completa : Ayuda con consulta SQL


cmfab
10-04-2012, 20:05:09
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.


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:

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:


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

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

Caral
11-04-2012, 16:02:11
Hola
Revisando me doy cuenta de que si se repiten, osea, son identicos los datos de los campos en la tabla 2, SI se suman en el importe.
Por eso en principio comente de la consulta anidada, para evitar esa suma en el importe.

Esta es la sentencia que se necesita para evitar la duplicacion, osea, que no sume dos veces el dato del importe.

SELECT DISTINCT Tabla2.Campo1, Tabla2.Campo2
( SELECT Sum(Tabla1.Importe) AS Importe FROM TABLA1 WHERE TABLA1.CAMPOID = TABLA2.CAMPOID )
FROM Tabla1 INNER JOIN Tabla2 ON Tabla1.CampoID = Tabla2.CampoID
GROUP BY TABLA2.CAMPOID, Tabla2.Campo1, Tabla2.Campo2;

Saludos

cmfab
11-04-2012, 16:26:51
No, pero el tema es que en la tabla2, los registros tienen la misma informacion en los tres campos

saludos,

Caral
11-04-2012, 16:35:10
Hola
Revisa la respuesta # 21. (arriba)
Saludos

cmfab
11-04-2012, 16:39:14
es cierto funciono en Access pero me da error en MySQL, seráque tengo que poner algun caracter antes de la segunda clausula Select, porque me esta marcando el error en esa posicion

cmfab
11-04-2012, 17:16:11
funciono al poner una "," antes del segundo select anidado. así que por mi doy fin a este dilema. muchas gracias por todo Caral

un saludo grande !!!!