Join 2 mysql queries to get a common result

0

I have this query:

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 

What I get is the following:

and what I want to obtain or the expected results, it would be something like this

The idea is to add, count and group, both, quantity, value and month is a single row. Thank you very much everyone.

    
asked by maha1982 03.01.2019 в 02:03
source

1 answer

2

You can join two selects that return the same number of columns with the same data types using 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
    
answered by 03.01.2019 / 02:24
source