Unir 2 consultas mysql para obtener un resultado en comun

publicado por: Anonymous

Tengo esta consulta:

SELECT DISTINCT * FROM (

SELECT 
meses.id,
meses.nombre_mes,
count(asignacion.fecha_envio) AS cantidad,
SUM(hijos.valor) AS valor,
year(asignacion.fecha_envio) AS ano
FROM meses
left join asignacion ON meses.id = MONTH(asignacion.fecha_envio)
left join pedidos on pedidos.id = asignacion.id_pedido
left join hijos on hijos.id = pedidos.tratamiento 
WHERE asignacion.id_laboratorio = 4 AND asignacion.estado_envio = 'S' 
GROUP BY meses.id

UNION ALL

SELECT
meses.id, 
meses.nombre_mes, 
count(asignacion_etapas.fecha_envio) AS cantidad, 
SUM(hijos.valor) AS valor, 
year(asignacion_etapas.fecha_envio) AS ano
FROM meses
LEFT JOIN asignacion_etapas ON meses.id = 
MONTH(asignacion_etapas.fecha_envio)
left join hijos on hijos.id = asignacion_etapas.proc
WHERE asignacion_etapas.id_laboratorio = 4 AND asignacion_etapas.estado_envio = 'S' 

GROUP BY meses.id) as x 

Lo que obtengo es lo siguiente:

introducir la descripción de la imagen aquí

y lo que deseo obtener o los resultados esperados, seria algo como esto

introducir la descripción de la imagen aquí

La idea es sumar, contar y agrupar, tanto, cantidad, valor y mes es una sola fila. Desde ya muchas gracias a todos.

solución

Podés unir dos selects que devuelven la misma cantidad de columnas con los mismos tipos de datos usando union.

select t.id, t.nombre_mes, sum(t.cantidad) as cant_total, sum(t.valor) as valor_total, t.ano
from(
    SELECT
    meses.id,
    meses.nombre_mes,
    count(asignacion.fecha_envio) AS cantidad,
    SUM(hijos.valor) AS valor,
    year(asignacion.fecha_envio) AS ano
    FROM meses
    left join asignacion ON meses.id = MONTH(asignacion.fecha_envio)
    left join pedidos on pedidos.id = asignacion.id_pedido
    left join hijos on hijos.id = pedidos.tratamiento 
    WHERE asignacion.id_laboratorio = 4 AND asignacion.estado_envio = 'S'  
    GROUP BY meses.id
    UNION ALL
    SELECT 
    meses.id, 
    meses.nombre_mes, 
    count(asignacion_etapas.fecha_envio) AS cantidad, 
    SUM(hijos.valor) AS valor, 
    year(asignacion_etapas.fecha_envio) AS ano
    FROM meses
    LEFT JOIN asignacion_etapas ON meses.id = MONTH(asignacion_etapas.fecha_envio)
    left join hijos on hijos.id = asignacion_etapas.proc
    WHERE asignacion_etapas.id_laboratorio = 4 AND asignacion_etapas.estado_envio = 'S' 
    GROUP BY meses.id
) as t
group by t.id, t.nombre_mes, t.ano
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *