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

Query Complicado

Estas en el tema de Query Complicado en el foro de Mysql en Foros del Web. Hola a todos los usuarios de este excelente foro, tengo un problema enorme, necesito hacer una consulta para un reporte pero está un poco complicada ...
  #1 (permalink)  
Antiguo 27/08/2009, 16:24
 
Fecha de Ingreso: abril-2009
Mensajes: 78
Antigüedad: 10 años, 11 meses
Puntos: 0
Query Complicado

Hola a todos los usuarios de este excelente foro, tengo un problema enorme, necesito hacer una consulta para un reporte pero está un poco complicada para mi porque me hago bolas y la verdad es que no se ni por donde empezar, ni siquiera se si me voy a poder explicar pero para esto les voy a poner mis tablas y todo para ver si alguien me puede ayudar, primero voy a poner las tablas que necesito para el query y luego les voy a decir lo que tiene que hacer porque si no tal vez no me entiendan

tabla conceptos_solic
Folio int, Id_empresa int, Concepto int, Tot_concepto float

tabla conceptos
Folio int, Id_empresa int, Concepto int, Tot_concepto float

tabla solicitud_viat
Folio int, Id-empresa int, Id_empleado int

tabla justif_gastos
Folio int, Id_empresa int, Id_empleado int

tabla empresas
Id_empresa int, Nombre varchar

tabla empleados
Id_empleados int, Nombre varchar, Id_empresa int

tabla crea_conceptos
Concepto int, Definicion varchar

El usuario tiene que poner el Id_empleado y el Concepto y la consulta me tiene que traer el nombre del empleado, la empresa a la que pertenece, la definicion del concepto, todos los Folios y Tot_concepto que tengan el numero de Concepto que dio el usuario y que pertenezcan a ese empleado, además se tiene que hacer una relación por Folio entre el Tot_concepto de conceptos_solic y el Tot_concepto de conceptos para que reste el Tot_concepto de conceptos al Tot_concepto de conceptos_solic para poner la diferencia en una columna temporal, además otra cosa es que en la tabla conceptos y en la tabla conceptos_solic hay varios registros que tendran el mismo folio y el mismo numero de Concepto estos se tienen que sumar en cada tabla y que solo relacione esta suma para realizar la diferencia, como ven esto es bastante complicado para mi espero que para alguno de ustedes no lo sea y me puedan ayudar, si a algo no le entendieron diganmelo por favor y voy a tratar de aclararlo lo mas posible
Gracias a todos por su ayuda
  #2 (permalink)  
Antiguo 29/08/2009, 21:18
 
Fecha de Ingreso: agosto-2009
Mensajes: 9
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Query Complicado

Hola,

Haber si te entendi...

1. Poner el Id_empleado y el Concepto

Obtener:
1. nombre del empleado,
2. la empresa a la que pertenece

select empleados.nombre,(select nombre from empresas where id=empleados.id_empresa) from empleados where id_empleado=id_dado;

3. la definicion del concepto. DUDA: como se relacionan los conceptos con el empleado? si fuera con la tabla conceptos via el id_empresa... podriamos usar:

select empleados.nombre,empresas.nombre,(select definicion from crea_conceptos where id=conceptos.id_concepto) from empleados inner join empresas inner join on empresas.id=id_empresa inner join conceptos on conceptos.id_empresa=empresa.id where id_empleado=id_empleado_dado and conceptos.id=id_concepto_dado;


4. todos los Folios y Tot_concepto que tengan el numero de Concepto que dio el usuario y que pertenezcan a ese empleado.

Este creo que seria mejor ponerlo en otro query aparte... veamos...

select conceptos.* from conceptos inner join empleados on conceptos.id_empresa=empleados.id_empresa where concepto=concepto_dado and empleados.id=id_empleado_dado

Ufff... que sigue....

Mejor... prueba y me cuentas como te fue para seguirle...
Saludos!!!
  #3 (permalink)  
Antiguo 04/09/2009, 17:03
 
Fecha de Ingreso: abril-2009
Mensajes: 78
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Query Complicado

OK Principalmente una disculpa a todos y mas que nada a YONAROX, por tardarme tanto en responder pero como estoy haciendo una aplicación web me pidieron algunos puntos urgentes pero bueno mil disculpas y gracias por tu ayuda YONAROX, de hecho intenté lo que pusiste y me mandó un error, después resumí un poco la consulta y quité el nombre de la empresa, el nombre del concepto y el nombre del empleado y los voy a poner en otra consulta, con respecto a lo quedó por hacer de la consulta lo hice de la siguiente forma:

SELECT
solicitud_viat.Id_empleado,
solicitud_viat.Folio,
SUM(conceptos_solic.Tot_concepto) AS TotalSolicitud,
justif_gastos.Folio,
SUM(conceptos.Tot_concepto) AS TotalJustificacion,
(SUM(conceptos_solic.Tot_concepto)) - (SUM(conceptos.Tot_concepto)) AS resta
FROM
justif_gastos
INNER JOIN conceptos ON (justif_gastos.Folio=conceptos.Folio),
solicitud_viat
INNER JOIN conceptos_solic ON (solicitud_viat.Folio=conceptos_solic.Folio)
WHERE
(justif_gastos.Id_empleado = 1) AND
(solicitud_viat.Id_empleado = 1) AND
(conceptos.Concepto = 2) AND
(conceptos_solic.Concepto = 2)
GROUP BY
justif_gastos.Folio,
solicitud_viat.Folio

y pues ya mas o menos me salió, pero todavia queda un detalle, el resultado que me manda es el siguiente:

Id_empleado Folio TotalSolicitud Folio TotalJustificacion Resta
1 35 3300 35 2000 1300

En mi tabla conceptos_solic tengo dos conceptos con el folio 35 y el numero de concepto 2, asi que lo que me está trayendo está bien, pero el detalle está en que en mi tabla conceptos, la cual es la de Justificacion solo tengo un concepto que cumple con las dos condiciones del folio 35 y el numero de concepto 2 el cual tiene 1000, asi que en TotalJustificacion debería tener 1000 en vez de 2000 o sea debería quedar así:

Id_empleado Folio TotalSolicitud Folio TotalJustificacion Resta
1 35 3300 35 1000 2300

Alguien me podría ayudar a saber porque hace eso y como resolverlo?
Prometo agradecer rapido ya que es lo penultimo que me falta

Gracias a todos
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




La zona horaria es GMT -6. Ahora son las 10:23.