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 hacer que SQL imprima en la misma fila en lugar de varias filas (la base de datos es DB2)

Tengo 2 tablas de las cuales necesito seleccionar datos.

tabla1:

ID nombre
1 John
2 Mark
3 Anna

tabla2:

Person_ID tipo año
1 nacimiento 1920
1 graduación 1950
1 fallecimiento 2000
2 nacimiento 1940
2 graduación 1960
2 fallecimiento 2011

Quiero escribir una consulta que los ponga todos en la misma fila como:

id nombre nacimiento graduación fallecimiento
1 John 1920 1950 2000

Intenté:

SELECT
    t1.id AS id, t1.nombre AS nombre, 
    CASE WHEN t2.tipo = 'nacimiento' THEN t2.año END AS nacimiento,
    CASE WHEN t2.tipo = 'graduación' THEN t2.año END AS graduación,
    CASE WHEN t2.tipo = 'fallecimiento' THEN t2.año END AS fallecimiento
FROM
    tabla1 t1 
INNER JOIN 
    tabla2 t2 ON t1.id = t2.Person_ID
WHERE
    t1.id = 1 
GROUP BY
    t1.id, t1.nombre, t2.tipo, t2.año

Este es el resultado que obtengo ahora:

id nombre nacimiento graduación fallecimiento
1 John 1920 null null
1 John null 1950 null
1 John null null 2000
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener el resultado deseado, puedes usar subconsultas en su lugar:

    SELECT t1.id AS id, t1.name AS name, 
        (SELECT year FROM table2 WHERE Person_ID = t1.id AND type = 'born') AS born,
        (SELECT year FROM table2 WHERE Person_ID = t1.id AND type = 'graduated') AS grad,
        (SELECT year FROM table2 WHERE Person_ID = t1.id AND type = 'died') AS died
    FROM table1 t1
    WHERE t1.id = 1;
    

    Esto te dará una única fila con los datos que necesitas:

    id name born grad died
    1 John 1920 1950 2000

Comments are closed.