es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo establecer un valor predeterminado a partir de una unión de intervalo de mes y año en MySQL.

Tengo un problema con mi consulta. Tengo dos tablas y quiero unirlas para obtener los resultados basados en la clave primaria de la primera tabla, pero me falta 1 dato de la primera tabla.

Aquí está mi fiddle: enlace

Como puedes ver, me falta “xx3” del mes 1.

Aquí tienes una imagen: enlace

He intentado cambiar la unión izquierda y derecha, pero los resultados siguen siendo los mismos.

Como puedes ver, tengo que establecer coalesce(sum(b.sd_qty),0) as total si no hay qty, establecer 0 como valor predeterminado.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Basándose en la información proporcionada y en el SQL Fiddle proporcionado, parece que el problema radica en el hecho de que la primera tabla (tabla1) no tiene el valor de clave primaria “xx3” para el mes 1. Esto significa que cuando se unen las tablas, no hay un registro coincidente en tabla1 para “xx3” en el mes 1, lo que resulta en la falta de datos.

    Para solucionar este problema, puedes utilizar un LEFT JOIN para asegurarte de que todos los registros de tabla1 se incluyan en el conjunto de resultados, independientemente de si hay o no un registro coincidente en tabla2. Además, puedes utilizar la función COALESCE para establecer el valor de “total” en 0 si no hay un valor de “sd_qty” para un registro en particular.

    La siguiente consulta debería lograr el resultado deseado:

    SELECT t1.primarykey, t1.month, COALESCE(SUM(t2.sd_qty), 0) AS total
    FROM table1 t1
    LEFT JOIN table2 t2 ON t1.primarykey = t2.primarykey AND t1.month = t2.month
    GROUP BY t1.primarykey, t1.month
    

    Esto te dará un conjunto de resultados que incluye todos los registros de tabla1, así como el valor correspondiente de “total” de tabla2. Si no hay un registro coincidente en tabla2, el valor de “total” se establecerá en 0.

Comments are closed.