WITH labores AS (
SELECT plbIdPresupuesto, plbIdSegmento, SUM(ROUND(plbPrecioExtendido, 2)) AS totalLabores
FROM pre_Labor
WHERE plbEliminado = 0
GROUP BY plbIdPresupuesto, plbIdSegmento
), miscelaneos AS (
SELECT pmiIdPresupuesto, pmiIdSegmento,
SUM(CASE pmiTipo WHEN 'GASTOS VIAJE' THEN pmiPrecioExtendido ELSE 0 END) AS [GASTOS VIAJE],
SUM(CASE pmiTipo WHEN 'SUMINISTROS' THEN pmiPrecioExtendido ELSE 0 END) AS [SUMINISTROS],
SUM(ROUND(pmiPrecioExtendido, 2)) AS totalMiscelaneos
FROM pre_Miscelaneo
WHERE pmiEliminado = 0
GROUP BY pmiIdPresupuesto, pmiIdSegmento
)
SELECT psgIdPresupuesto, totalLabores, [GASTOS VIAJE], [SUMINISTROS], totalMiscelaneos
FROM pre_Segmento
LEFT JOIN labores ON psgIdPresupuesto = plbIdPresupuesto AND psgIdSegmento = plbIdSegmento
LEFT JOIN miscelaneos ON psgIdPresupuesto = pmiIdPresupuesto AND psgIdSegmento = pmiIdSegmento
WHERE psgEliminado = 0
GROUP BY psgIdPresupuesto