none
Error Sumas Entre Tres Tablas

    Pregunta

  • Hola a todos, tengo el siguiente problema, nesecito sumar los egresos de un proyecto que hace un trabajador de la empresa, aparte de eso sumar las Horas Humanas de cada trabajador que trabajo en el proyecto, sumar ambos resultados y restarlos del valor neto del proyecto, Lo que me arroja la utilidad. tengo el procedimiento almacenado planteado, el tema es que por alguna razon no me esta entregando los resultados exactos. Por ejemplo en mi tabla egresos, tengo 3 egresos de distintos trabajadores los cuales suman 300.000 y el valor de la suma que me muestra es 600.000. Lo mismo ocurre con las Horas Humanas. El pero es que si realizo los calculos por separados si me arrojan los valores adecuados. les dejo la consulta.

    SELECT  
    	P.Valor_Total as "Valor Proyecto",
    	SUM(e.Monto) AS "Logistica",
    	SUM(H.Horas_Trabajadas * t.valor_hora) as "HH",
    	isnull((p.valor_total * 0.15), 0) as "Administración",  
    	isnull((p.Valor_Total - (p.valor_total * 0.15) - SUM(H.Horas_Trabajadas * t.valor_hora) - SUM(e.Monto)), 0) as "Utilidad"
    
    	from tbl_proyecto as P
    	left JOIN Tbl_Trabajador as T on (P.Jefe_Proyecto = T.Rut) 
    	left join Tbl_Egresos e ON (p.Centro_Costo = e.Centro_Costo_Proyecto) and (e.Estado = 'Aprobado')
    	left join Tbl_Cliente as C on (P.Rut_Cliente = C.Rut)
    	Left join tbl_hh as H ON (P.centro_costo = h.centro_costo_proyecto) 
    	WHERE P.Centro_Costo = 'IN71701'
    	GROUP BY
       	P.Centro_Costo, 
    	P.Valor_Total,
    	p.Fondos_Asignados; 

    lunes, 20 de febrero de 2017 19:34

Respuestas

  • adriian.91,

    Es propio por el tipo de combinación que realizas, debes intentar obtener los resultados de manera separada:

    WITH EgresosTrabajador AS
    (
        SELECT  
    	   P.Centro_Costo AS [Centro_Costo],
    	   P.Rut_Cliente AS [Rut_Cliente],
    	   MAX(T.valor_hora) AS [valor_hora],
    	   MAX(P.Valor_Total) AS [Valor Proyecto],
    	   SUM(E.Monto) AS [Logistica],	   
    	   ISNULL((MAX(P.Valor_Total) * 0.15), 0) AS [Administración]
        FROM 
    	   tbl_proyecto P
    	   LEFT JOIN Tbl_Trabajador T ON (P.Jefe_Proyecto = T.Rut) 
    	   LEFT JOIN Tbl_Egresos E ON (P.Centro_Costo = E.Centro_Costo_Proyecto) 
    		  AND (E.Estado = 'Aprobado')
        WHERE 
    	   P.Centro_Costo = 'IN71701'
        GROUP BY
    	   P.Centro_Costo, P.Rut_Cliente
    )
    SELECT  
    	MAX(E.[Valor Proyecto]) AS [Valor Proyecto],
    	MAX(E.Logistica) AS [Logistica],
    	SUM(H.Horas_Trabajadas) * MAX(E.[valor_hora]) AS [HH],
    	MAX(E.Administración),
    	ISNULL((MAX(E.[Valor Proyecto]) - (MAX(E.[Valor Proyecto]) * 0.15) - 
    	   (SUM(H.Horas_Trabajadas) * MAX(E.valor_hora)) - MAX(E.Logistica)), 0) AS [Utilidad]
    FROM 
        EgresosTrabajador E
        LEFT JOIN Tbl_Cliente C ON (E.Rut_Cliente = C.Rut)
        LEFT JOIN tbl_hh H ON (E.centro_costo = H.centro_costo_proyecto) 
    GROUP BY
        e.Centro_Costo;
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta adriian.91 lunes, 20 de febrero de 2017 20:16
    lunes, 20 de febrero de 2017 20:09