Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Unir tablas en un renglon

Estas en el tema de Unir tablas en un renglon en el foro de Mysql en Foros del Web. Hola como estan? bueno no se si el titulo sea acorde pero necesito ayuda con esto lla consulta que aca dejo anda muy bien y ...
  #1 (permalink)  
Antiguo 26/04/2010, 17:37
mgd
 
Fecha de Ingreso: enero-2009
Mensajes: 129
Antigüedad: 15 años, 10 meses
Puntos: 0
Unir tablas en un renglon

Hola como estan?
bueno no se si el titulo sea acorde pero necesito ayuda con esto

lla consulta que aca dejo anda muy bien y trae casi todos los datos que necesito
trae los datos de cantidad de medias res, kilos de ellas importes y el cliente al que se le envio la o las medias reses pero lo que necesito es agregar aqui mismo si es posible las achuras que tambien se lleva el cliente.

FUNCIONA

Código SQL:
Ver original
  1. SELECT SUM(res.importetotal) AS total, res.importetotal, concat(COUNT(res.codres),'/2') AS cantidad,
  2. CAST(group_concat(concat(res.codres,'-', res.peso) separator '/') AS CHAR(100)) AS renglon,
  3.  clientes.nombre
  4. FROM res INNER JOIN clientes ON clientes.codcliente = res.codcliente
  5. WHERE res.fecha_salida = '20100426'
  6. GROUP BY clientes.codcliente

Las achuras estan en otra tabla llamada achuras que tiene un codigo de achura, el codigo del cliente, la fecha de salida y el importe.
en definitiva lo que necesitaria agregar a esta consulta seria algo asi

count(achuras.codachura) cantidadachuras, sum (achuras.importe) as totalachuras

pero la verdad es que no se como hacerlo porque no se como igualar en el inner join la tabla achuras con las demas, probe con la fecha de salida ya que tanto res como achuras tienen fecha de salida pero no trae registro, y pasa lo mismo si pruebo unir clientes con achuras con el campo codcliente, no trae registros

ESTA CONSULTA NO TRAE REGISTROS
Código SQL:
Ver original
  1. SELECT SUM(res.importetotal) AS total, res.importetotal, concat(COUNT(res.codres),'/2') AS cantidad,
  2. COUNT(achuras.codachura) AS cantidadachuras, SUM(achuras.importeventaachura) AS totalachuras,
  3. CAST(group_concat(concat(res.codres,'-', res.peso) separator '/') AS CHAR(100)) AS renglon,
  4.  clientes.nombre
  5. FROM res INNER JOIN clientes ON clientes.codcliente = res.codcliente
  6.                  INNER JOIN achuras ON achuras.codcliente = clientes.codcliente
  7. WHERE res.fecha_salida = '20100426' AND achuras.fecha_salida = '20100426'
  8. GROUP BY clientes.codcliente


espero haberme hecho entender, muchas gracias
  #2 (permalink)  
Antiguo 26/04/2010, 18:54
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 3 meses
Puntos: 214
Respuesta: Unir tablas en un renglon

Hola
Y las fechas como estan en la tabla?
es decir, las buscas con '20100426' pero en la bd estan así o estan en algún formato especifico? por ej '2010-04-26'?
si es así, intenta igualar los formatos ya sea manualmente o si mal no recuerdo
mysql tiene la función format o date_format para estos casos

Espero te funcione y si no pues dejalo saber
saludos
  #3 (permalink)  
Antiguo 26/04/2010, 20:05
mgd
 
Fecha de Ingreso: enero-2009
Mensajes: 129
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Unir tablas en un renglon

Las fechas están bien, siempre utilizo el format 'yyyymmdd' para buscar y funciona bárbaro. Incluso probé borrando esa parte pero sigue sin traerme ninguna registro pero debería traer algunos.
  #4 (permalink)  
Antiguo 26/04/2010, 21:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Unir tablas en un renglon

Aún no queda claro qué tipo de columna usas para guardar la fecha, y eso es importante a la hora de realizar conversiones.

Ahora bien, analizando tu sentencia:
Código MySQL:
Ver original
  1.   SUM(R.importetotal) total,
  2.   R.importetotal,
  3.   CONCAT(COUNT(res.codres),'/2') cantidad,
  4.   COUNT(A.codachura) cantidadachuras,
  5.   SUM(A.importeventaachura) totalachuras,
  6.   CAST(GROUP_CONCAT(CONCAT(R.codres,'-', R.peso) separator '/') AS CHAR(100)) renglon,
  7.   C.nombre
  8. FROM res R
  9.   INNER JOIN clientes C ON C.codcliente = R.codcliente
  10.   INNER JOIN achuras A ON A.codcliente = C.codcliente
  11.   R.fecha_salida = '20100426'
  12.   AND
  13.   A.fecha_salida = '20100426'
  14. GROUP BY C.codcliente
Esto, para devolver registros, tiene que cumplir dos condiciones:
1. La fecha de salida de res y de achuras debe ser sí o si 26/04/2010.
2. De haber por lo menos un registro de res cuyo codcliente esté al mismo tiempo en otro registro de ese día de achuras, y también que sea un cliente válido.

El tema aquí es que ambos grupos de condiciones deben cumplirse al mismo tiempo para que haya registros devueltos. Es decir: Sólo devolverá registros si al mismo tiempo hay salidas de res y de achuras... Si hay de uno sólo, no lo devolverá.
El otro problema de lógica se da porque el orden de las tablas hace que sólo se considere un registro para el caso de que haya res en salida. Si no la hay, el análisis jamás llegará al de achuras. Esto se debe a que el orden de lectura de las tablas es de izquierda a derecha.

Un esquema más flexible sería:
Código MySQL:
Ver original
  1.   SUM(R.importetotal) total,
  2.   R.importetotal,
  3.   CONCAT(COUNT(res.codres),'/2') cantidad,
  4.   COUNT(A.codachura) cantidadachuras,
  5.   SUM(A.importeventaachura) totalachuras,
  6.   CAST(GROUP_CONCAT(CONCAT(R.codres,'-', R.peso) separator '/') AS CHAR(100)) renglon,
  7.   C.nombre
  8. FROM clientes C
  9.   LEFT JOIN res R ON C.codcliente = R.codcliente
  10.   LEFT JOIN achuras A ON C.codcliente = A.codcliente
  11.   R.fecha_salida = '20100426'
  12.   AND
  13.   A.fecha_salida = '20100426'
  14. GROUP BY C.codcliente

En ese caso lo más importante son los clientes, que siempre existen, mientras que sumará los valores de una u otra tabla si y sólo si hay valores relacionados con el cliente para hacerlo.

Un punto aparte es este segmento:
Código MySQL:
Ver original
  1. CAST(GROUP_CONCAT(CONCAT(R.codres,'-', R.peso) separator '/') AS CHAR(100)) renglon,
Esto parece correcto, pero puede dar lugar a errores por truncado de datos, si el grupo acumulado excede los 100 caracteres, o por compatibilidad de datos devueltos, ya que en determinado contexto puede estar devolviendo un BLOB y no un CHAR (realiza una conversión implícita por las características del dato devuelto).
En definitiva, hay que verificar el resultado de este campo.

Espero que te sea útil.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 27/04/2010, 04:59
mgd
 
Fecha de Ingreso: enero-2009
Mensajes: 129
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Unir tablas en un renglon

Muchas gracias por tu respuesta, el campo fecha es un datetime.
Probando tu segunda opción para la consulta el resultado fue que no me trae datos si es que no hay registros coincidentes en las 2 tablas osea es res y achuras. Supongo que es por el filtro en where asique probe reemplazando el AND por OR Y el resultado fue que me trajo como cantidad de res y de achuras 8, osea 8 achuras y 8 res, cuando deberia haber traido 4 res y 0 achuras. Probando con el dia 27 de abril deberia traerme 1 res y 2 achuras pero me trae 16 de cada una.


Con respecto a esta linea
Código SQL:
Ver original
  1. CAST(GROUP_CONCAT(CONCAT(R.codres,'-', R.peso) separator '/') AS CHAR(100)) renglon

tenes razon va a ser algo complicado y me gustaria que tome 5 datos por renglon y el resto pasaran a otro renglon de ese mismo cliente, no se si es posible.

Bueno muchas gracias por tu aporte

Aca dejo la consulta como la modifique
Código SQL:
Ver original
  1. SELECT
  2.   SUM(R.importetotal) total,
  3.   R.importetotal,
  4.   CONCAT(COUNT(R.codres),'/2') cantidad,
  5.   COUNT(A.codachura) cantidadachuras,
  6.   SUM(A.importeventaachura) totalachuras,
  7.   CAST(GROUP_CONCAT(CONCAT(R.codres,'-', R.peso) separator '/') AS CHAR(100)) renglon,
  8.   C.nombre
  9. FROM clientes C
  10.   LEFT JOIN res R ON C.codcliente = R.codcliente
  11.   LEFT JOIN achuras A ON C.codcliente = A.codcliente
  12. WHERE
  13.   R.fecha_salida = '20100426'
  14.   OR
  15.   A.fecha_salida = '20100426'
  16. GROUP BY C.codcliente
  #6 (permalink)  
Antiguo 27/04/2010, 19:06
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 3 meses
Puntos: 214
Respuesta: Unir tablas en un renglon

Hola

Bueno, pues no entiendo bien como debe trabajar el modelo, pero haciendo pruebas sobre lo que creo entender veo lo siguiente

Con el OR de las fechas, si tengo por ej una sola achura de un cliente y tengo en la tabla res una res que coincida en fecha con la achura, el total de achuras va a ser 2, eso estaria bien?
me parece que no, es decir, deberia dar 1, o bueno, al menos eso creo
e igualmente con el OR te traeria incluso las personas que no tengan achuras
pero si tengan res en esa fecha
(achuras no anchuras, me lleva si confundo esas palabras!!!!)

En cuyo caso optaria por AND en vez de OR, teniendo eso en cuenta y con las condicionales como ya te lo mencionaba gnzsoloyo ya deberias obtener resultados, bueno, en mi caso estoy obteniendolos, si te sirve lo monte aquí

El usuario es mortiweb_test y el password es test123, igual puedes modificar las tablas si es que intui mal el modelo o si hace falta algo más, pero la consulta allí me esta funcionando bien

bueno, espero te funcione
saludos
  #7 (permalink)  
Antiguo 28/04/2010, 05:35
mgd
 
Fecha de Ingreso: enero-2009
Mensajes: 129
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Unir tablas en un renglon

Bueno muchas gracias estuve mirando y si el modelo esta tal cual lo tengo.
Ejecute la consulta y los resultado no son los reales.
Si te fijas el resultado es este

Código XML:
Ver original
  1. 1200    600   2/2     2 1000    4-60 kg/4-60 kg isaura
  2. 6000    6000  1/2     1 500                    8-600 kg madre

A Isaura trae 2 achuras y 2 reses cuando debería traerle (según los datos en tus tablas) cuando deberían ser 2 achuras y una res
Y ademas no trae los demás clientes que si tienen reses pero no achuras.


La palabra es achura jaja

Gracias por tu ayuda
  #8 (permalink)  
Antiguo 28/04/2010, 05:55
mgd
 
Fecha de Ingreso: enero-2009
Mensajes: 129
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Unir tablas en un renglon

Es como si faltara agregar un if a la consulta diciendole que si es achura que cuenta en achuras y si es res que cuente en res. Pero la verdad no se como usar el if
  #9 (permalink)  
Antiguo 28/04/2010, 11:49
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 3 meses
Puntos: 214
Respuesta: Unir tablas en un renglon

Hola
Uhm, y si le agregas un distinct dara el resultado correcto??

SELECT
SUM(R.importetotal) total,
R.importetotal,
CONCAT(COUNT(DISTINCT(R.codres)),'/2') cantidad,
COUNT(A.codachura) cantidadachuras,
SUM(A.importeventaachura) totalachuras,
CAST(GROUP_CONCAT(CONCAT(R.codres,'-', R.peso) separator '/') AS CHAR(100)) renglon,
C.nombre
FROM clientes C
LEFT JOIN res R ON C.codcliente = R.codcliente
LEFT JOIN achuras A ON C.codcliente = A.codcliente
WHERE
R.fecha_salida = '20100426'
AND
A.fecha_salida = '20100426'
GROUP BY C.codcliente

Muestra esto

Código CODE:
Ver original
  1. 1200     600     1/2     2     1000     4-60 kg/4-60 kg     isaura
  2. 6000     6000     1/2     1     500     8-600 kg     madre

Ahora si?? bueno, nos comentas
saludos
  #10 (permalink)  
Antiguo 28/04/2010, 16:09
mgd
 
Fecha de Ingreso: enero-2009
Mensajes: 129
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Unir tablas en un renglon

Eso funciona solo que muestra resultados siempre que hayan salido reses y achuras pero si solo son reses o solo achuras no muestra datos

la modifique un poco para probar y esta consulta me trae los datos de achuras solas, reses solas o las dos pero me trae tambien clientes que no tengan ni achuras ni reses
Código SQL:
Ver original
  1. SELECT
  2. SUM(R.importetotal) total,
  3. R.importetotal,
  4. CONCAT(COUNT(DISTINCT(R.codres)),'/2') cantidad,
  5. COUNT(DISTINCT(A.codachura)) cantidadachuras,
  6. SUM(A.importeventaachura) totalachuras,
  7. CAST(GROUP_CONCAT(CONCAT(R.codres,'-', R.peso) separator '/') AS CHAR(100)) renglon,
  8. C.nombre
  9. FROM clientes C
  10. LEFT JOIN res R ON C.codcliente = R.codcliente AND R.fecha_salida = '20100430'
  11. LEFT JOIN achuras A ON C.codcliente = A.codcliente AND A.fecha_salida = '20100430'
  12.  
  13. GROUP BY C.codcliente

Intente filtrar los clientes que tengan o achuras o reses o las dos pero no lo logre
  #11 (permalink)  
Antiguo 28/04/2010, 16:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Unir tablas en un renglon

Creo que por aquí anda la solución, y la respuesta al misterio.
Aclaro que volví a escribir la totalidad de la consulta para hacerla entendible en forma secuencial.
El problema viene por dos partes:
1) Se requiere que el segundo LEFT JOIN relacione las compras hechas en la misma fecha, de lo contrario los registros se repiten.
2) Nunca, NUNCA se almacenan valores con la sigla de su unidad de medida. El problema de la unidad de medida es una cuestión de representación en la aplicación, y no pertenece a la base de datos. Además, se requieren más caracteres para representar "100000" que para almacenar 10000.
La idea sería:
Código MySQL:
Ver original
  1.   DISTINCT(C.codcliente) `Cod. Cliene`,
  2.   C.nombre `Nombre`,
  3.   IFNULL(SUM(R.importetotal), 0)  `Importe RES`,
  4.   SUM(CAST(REPLACE(R.peso, ' kg','') AS UNSIGNED)) `Peso .RES`,
  5.   COUNT(R.peso) `Ventas ACHURA`,
  6.   IFNULL(SUM(A.importeventaachura), 0) `Importe Total ACHURA`,
  7.   IFNULL(SUM(CAST(REPLACE(A.peso, ' kg','') AS UNSIGNED)), 0) `Peso ACHURA`,
  8.   COUNT(A.peso) `Ventas RES`,
  9.   SUM(CAST(REPLACE(R.peso, ' kg','') AS UNSIGNED)) + IFNULL(SUM(CAST(REPLACE(A.peso, ' kg','') AS UNSIGNED)), 0) `Total Peso`,
  10.   IFNULL(SUM(R.importetotal), 0)  + IFNULL(SUM(A.importeventaachura), 0) `Total valor`
  11. FROM clientes C
  12.   LEFT JOIN res R ON C.codcliente = R.codcliente
  13.   LEFT JOIN achuras A ON C.codcliente = A.codcliente AND R.fecha_salida = A.fecha_salida
  14. GROUP BY C.codcliente;
  15.  
  16. +-------------+----------+-------------+-----------+---------------+----------------------+-------------+------------+------------+-------------+
  17. | Cod. Cliene | Nombre   | Importe RES | Peso .RES | Ventas ACHURA | Importe Total ACHURA | Peso ACHURA | Ventas RES | Total Peso | Total valor |
  18. +-------------+----------+-------------+-----------+---------------+----------------------+-------------+------------+------------+-------------+
  19. |           1 | julian   |        6000 |       600 |             2 |                    0 |           0 |          0 |        600 |        6000 |
  20. |           2 | isaura   |        2400 |       240 |             4 |                 1000 |         100 |          2 |        340 |        3400 |
  21. |           3 | santiago |        8000 |       800 |             1 |                    0 |           0 |          0 |        800 |        8000 |
  22. |           4 | madre    |       18000 |      1800 |             3 |                  500 |         500 |          1 |       2300 |       18500 |
  23. |           5 | david    |        9000 |       900 |             1 |                    0 |           0 |          0 |        900 |        9000 |
  24. +-------------+----------+-------------+-----------+---------------+----------------------+-------------+------------+------------+-------------+

Si a esto le ponemos la condición de fecha:
Código MySQL:
Ver original
  1.   DISTINCT(C.codcliente) `Cod. Cliene`,
  2.   C.nombre `Nombre`,
  3.   IFNULL(SUM(R.importetotal), 0)  `Importe RES`,
  4.   SUM(CAST(REPLACE(R.peso, ' kg','') AS UNSIGNED)) `Peso .RES`,
  5.   COUNT(R.peso) `Ventas ACHURA`,
  6.   IFNULL(SUM(A.importeventaachura), 0) `Importe Total ACHURA`,
  7.   IFNULL(SUM(CAST(REPLACE(A.peso, ' kg','') AS UNSIGNED)), 0) `Peso ACHURA`,
  8.   COUNT(A.peso) `Ventas RES`,
  9.   SUM(CAST(REPLACE(R.peso, ' kg','') AS UNSIGNED)) + IFNULL(SUM(CAST(REPLACE(A.peso, ' kg','') AS UNSIGNED)), 0) `Total Peso`,
  10.   IFNULL(SUM(R.importetotal), 0)  + IFNULL(SUM(A.importeventaachura), 0) `Total valor`
  11. FROM clientes C
  12.   LEFT JOIN res R ON C.codcliente = R.codcliente
  13.   LEFT JOIN achuras A ON C.codcliente = A.codcliente AND R.fecha_salida = A.fecha_salida
  14. WHERE A.fecha_salida = '2010-04-26' AND A.fecha_salida = '2010-04-26'
  15. GROUP BY C.codcliente;
  16.  
  17. +-------------+--------+-------------+-----------+---------------+----------------------+-------------+------------+------------+-------------+
  18. | Cod. Cliene | Nombre | Importe RES | Peso .RES | Ventas ACHURA | Importe Total ACHURA | Peso ACHURA | Ventas RES | Total Peso | Total valor |
  19. +-------------+--------+-------------+-----------+---------------+----------------------+-------------+------------+------------+-------------+
  20. |           2 | isaura |        1200 |       120 |             2 |                 1000 |         100 |          2 |        220 |        2200 |
  21. |           4 | madre  |        6000 |       600 |             1 |                  500 |         500 |          1 |       1100 |        6500 |
  22. +-------------+--------+-------------+-----------+---------------+----------------------+-------------+------------+------------+-------------+
Nota: Me vi obligado a usar la función REPLACE para quitar la basura del campo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 29/04/2010, 07:00
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 3 meses
Puntos: 214
Respuesta: Unir tablas en un renglon

Hola
Bueno, pues definitivamente gnzsoloyo es tremendo analizador
de consultas, y apartandome un poco del tema en si que ya nos
comentara mgd si le funciona como desea, quisiera saber mr gnzsoloyo,
si haces las consultas con algún programa en particular que te
sugiera funciones que puedas usar (alguna ide, etc)
y si a la hora de realizar las consultas y, mostrarlas, te las
muestre en algún formato especifico (presentación mas que todo)
pues noto que en el post pusiste los resultados de las consultas
en una presentación que me recuerda la consola mysql pero pues que se ve
bastante bien aquí en el post, quisiera saber como le haces,
agradezco tu respuesta y de nuevo, que buen analisis

saludos
  #13 (permalink)  
Antiguo 29/04/2010, 07:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Unir tablas en un renglon

En realidad lo mío es bastante artesanal. Solamente uso el MySQL Query Browser, y en los últimos tiempos he estado explorando el MySQL Workbench, que también es muy potente.

Mi elección de la herramienta es más que nada una decisión de compatibilidad: Como son aplicaciones nativas, tengo menos problemas a la hora de las pruebas.

El Navicat, por caso, es muy bueno, pero tiene el problema de meterle espacios a las funciones, lo que genera errores de sintaxis inexistentes en el código. Si bien eso se puede solucionar parametrizando los servidores, los clientes de la empresa donde trabajo son medio asnos para manejar bases de datos (incluso los de TI), por lo que es mejor que no metan mano.

Trabajo habitualmente analizando las consultas manualmente, y como además, hago bastantes consultas de múltiples niveles de subconsultas, lo cual me obliga a depuraciones muy detalladas, con lo que muy pocos asistentes me dan la personalización que en ocasiones requiero para los trabajos.

Para mí el MySQL Query Browser, con todo lo rígido que es, es lo más eficiente que encuentro para el trabajo de desarrollo. Cuando tengo los problemas solucionados, simplemente los copio, los formateo en un editor de textos y los incrusto en la aplicación.
Así de simple.

Del resto, de la forma de analizar los problemas, es simpe método y todo se reduce una cosa:

Cita:
"- ¿Cómo lo hiciste, Juan?"
"- Como todo, Pedro: Práctica."
Juan Salvador Gaviota, de Richard Bach
Respecto al formateo de las tablas, en realidad no es mío. Hace un tiempo noté que uno de los foristas (no recuerdo quién), cuando ponía código con muestras formateadas, lo hacía copiando los resultados de la consola de MySQL. Cuando probé, me di cuenta que realmente quedaba así: Con las tablas bien armadas, pero solamente si usas la etiqueta de SQL o MySQL.
Ese es el secreto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 29/04/2010, 09:12
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 3 meses
Puntos: 214
Respuesta: Unir tablas en un renglon

Hola

Gracias por el post, yo he usado con más regularidad el workbrench y pues es buena herramienta, y tanto el navicat como el query browser los he manejado
pero la verdad no con juicio, ya me adapte a phpmyadmin, aunque definitivamente
cuando manejaba el sql query si me facilitaba bastante recargas de navegador, pero pues no lo he instalado aqui aún

Y gracias por el secreto, lo desconocía y gran aporte pues me parecia
bastante terrible el formateo que le daba al resultado de phpmyadmin
pegado aqui y con todo y etiqueta de sql o mysql

saludos

ha, juan salvador gaviota, recuerdo de mi primaria, has despertado
una neurona dormida !!!!
  #15 (permalink)  
Antiguo 29/04/2010, 13:01
mgd
 
Fecha de Ingreso: enero-2009
Mensajes: 129
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Unir tablas en un renglon

habia puesto que estaba todo barbaro pero no, ahora lo pruebo de nuevo y veo

Última edición por mgd; 29/04/2010 a las 13:46 Razón: Error
  #16 (permalink)  
Antiguo 29/04/2010, 14:02
mgd
 
Fecha de Ingreso: enero-2009
Mensajes: 129
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Unir tablas en un renglon

Bueno la verdad que no consigo lo que necesito, podría enviarte por correo la base de datos?
Es que me trae datos solo cuando hay achuras o reses. La he modificado pero no hay forma. No se que hago mal.
Me piden ahora agrupar todo por cliente y fecha, mostrando también la fecha. Me estoy volviendo loco jaja
  #17 (permalink)  
Antiguo 29/04/2010, 14:30
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 3 meses
Puntos: 214
Respuesta: Unir tablas en un renglon

Hola
Bueno, pues como te dije, puedes modificar sin problemas la bd que te puse en el link, así que no me la mandes por correo sino subela directamente allá para hacer pruebas
  #18 (permalink)  
Antiguo 29/04/2010, 15:53
mgd
 
Fecha de Ingreso: enero-2009
Mensajes: 129
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Unir tablas en un renglon

OK acabo de modificar las tablas achuras y res que estaban en la base de datos para que esten exactamente igual a las que tengo yo.
El definitiva lo que necesito es traer la cantidad de achuras, cantidad de reses, total de achuras, total de reses, cliente, fecha_salida, total por cliente (total achuras + total reses) que tengan fecha de salida entre dos fechas, agrupados por cliente y por fecha porque necesito un renglon por cada fecha y el problema mas grande es que no me trara achuras si no habia reses vendidas y viceversa. Como dije varias veces por mas que intente no pude lograrlo.
gracias
  #19 (permalink)  
Antiguo 29/04/2010, 17:11
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 3 meses
Puntos: 214
Respuesta: Unir tablas en un renglon

Hola
Podrias poner datos de prueba en las tablas? si tienes scripts de php que te faciliten la tarea con gusto los subo al hosting, o si puedes hacer por phpmyadmin o por la herramienta que manejes un back up de tus datos de las tablas y con ese alimentar las del link, tanto mejor, lo digo porque ahora mismo estoy en otro tema del foro y pues no tengo time para montar datos de prueba, o pues por phpmyadmin puedes ingresarlos también como te quede mejor
saludos
  #20 (permalink)  
Antiguo 29/04/2010, 21:47
mgd
 
Fecha de Ingreso: enero-2009
Mensajes: 129
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Unir tablas en un renglon

Si disculpa, ya inserte datos en ambas tablas
  #21 (permalink)  
Antiguo 05/05/2010, 16:26
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 3 meses
Puntos: 214
Respuesta: Unir tablas en un renglon

Hola
Bueno, pues en primera estoy en otras cosas y por eso no habia tenido tiempo de postear, y por otra, estaba probando las consultas que ya estaban funcionando, pero veo por ej que la tabla achura que subiste no tiene la columna "peso", esto esta bien? en las que yo tenia si tenia ese campo, pero si tu no lo manejas finalmente entonces las querys te deben estar dando inconveniente

Por favor revisa que todas las columnas que uses esten en el modelo que subiste y pues nos comentas luego de probar de nuevo las querys
saludos
  #22 (permalink)  
Antiguo 06/05/2010, 06:12
mgd
 
Fecha de Ingreso: enero-2009
Mensajes: 129
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Unir tablas en un renglon

El modelo esta bien, la tabla achuras no suma como unidad. Es decir se vende como unidad y al precio final es el que digita el usuario. El importe de venta final es importeventaachura.
Lo demas esta todo bien. Solo las reses van con peso.
  #23 (permalink)  
Antiguo 09/05/2010, 11:45
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 3 meses
Puntos: 214
Respuesta: Unir tablas en un renglon

Hola

Bueno, teniendo en cuenta la consulta más reciente
del post y modificandola quedaría así

Código MySQL:
Ver original
  1.   DISTINCT(C.codcliente) `Cod. Cliene`, C.nombre `Nombre`,
  2.   IFNULL(SUM(R.importetotal), 0)  `Importe RES`,
  3.   SUM(CAST(REPLACE(R.peso, ' kg','') AS UNSIGNED)) `Peso .RES`,
  4.   COUNT(R.peso) `Ventas ACHURA`,
  5.   IFNULL(SUM(A.importeventaachura), 0) `Importe Total ACHURA`,
  6.   IFNULL(SUM(CAST(REPLACE(R.peso, ' kg','') AS UNSIGNED)), 0) `Peso ACHURA`,
  7.   COUNT(R.peso) `Ventas RES`,
  8.   SUM(CAST(REPLACE(R.peso, ' kg','') AS UNSIGNED)) + IFNULL(SUM(CAST(REPLACE(R.peso, ' kg','') AS UNSIGNED)), 0) `Total Peso`,
  9.   IFNULL(SUM(R.importetotal), 0)  + IFNULL(SUM(A.importeventaachura), 0) `Total valor`
  10. FROM clientes C
  11.   LEFT JOIN res R ON C.codcliente = R.codcliente
  12.   LEFT JOIN achuras A ON C.codcliente = A.codcliente AND R.fecha_salida = A.fecha_salida
  13. GROUP BY C.codcliente;

Dando este resultado

Código MySQL:
Ver original
  1. +-------------+----------+-------------+-----------+---------------+----------------------+-------------+------------+------------+-------------+
  2. | Cod. Cliene | Nombre   | Importe RES | Peso .RES | Ventas ACHURA | Importe Total ACHURA | Peso ACHURA | Ventas RES | Total Peso | Total valor |
  3. +-------------+----------+-------------+-----------+---------------+----------------------+-------------+------------+------------+-------------+
  4. |           1 | julian   |    17043.02 |      1365 |            17 |               717.40 |        1365 |         17 |       2730 |    17760.42 |
  5. |           2 | isaura   |     5334.49 |       446 |             5 |                 0.00 |         446 |          5 |        892 |     5334.49 |
  6. |           3 | santiago |     4126.78 |       332 |             3 |                 0.00 |         332 |          3 |        664 |     4126.78 |
  7. |           4 | madre    |     4577.40 |       373 |             4 |                 0.00 |         373 |          4 |        746 |     4577.40 |
  8. |           5 | david    |     3820.99 |       314 |             3 |                 0.00 |         314 |          3 |        628 |     3820.99 |
  9. +-------------+----------+-------------+-----------+---------------+----------------------+-------------+------------+------------+-------------+

Es así??
Y si no es así, entonces por favor has un bosquejo de como debería salir
y que fechas usar para que se de el resultado que quieres
Ahora, ten en cuenta que estas queriendo traer datos indistintamente si
tienen o no ventas, cuando lo lógico sería querer traer datos si hay ventas
pues como yo lo entiendo es una consulta para saber las ventas o no?
Bueno, analizalo y nos comentas
saludos
  #24 (permalink)  
Antiguo 16/05/2010, 07:16
mgd
 
Fecha de Ingreso: enero-2009
Mensajes: 129
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Unir tablas en un renglon

Estuve perdido un tiempo jaja pero hice algo con respecto a este tema solo que no es lo optimo. Cree un par de tablas a partir de una consulta y con otra consulta consegui lo que necesitaba.
Sin dudas que esta mal pero de momento me salva un poco
Lo que necesito es este reporte.
En este reporte el cliente MARIO MORELLO saco por dia las reses(columna detalles) que nos trae los kilos - precio por kilo que en el primer caso es 86 kilos y 12.36 importe por kilo el total siguiente es el total de los kilos por importe de kilos de toas las reses de ese renglon que representan un dia. despues tenemos la cantidad de achuras que saco ese mismo dia y el total de achuras que si bien no muestra el precio de las achuas lo calcula en la consulta y por ultimo el cliente y el total de achuras + reses.
Al final del reporte esta el total del cliente en ese periodo de tiempo
Aca les dejo la imagen



Si no se ve la imagen entran aca

www.mgdsoft.com.ar

Gracias

Etiquetas: renglon, tablas, unir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 13:56.