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 unirse con una condición complicada en redshift

Tengo la siguiente tabla1

id name
1  A
3  B

y la tabla2

id label value
1   a    10
1   b    11
1   c    12
2   a    13
2   b    14
2   c    15 
3   a    16 
3   b    17
3   c    18

Mi resultado deseado es el siguiente. Me gustaría unir la tabla1 y la tabla2 en label = a y b
Supongo que debo unir dos veces en cada condición..

id name a    b
1   A   10   11
3   B   16   17

Intenté lo siguiente, pero solo obtengo resultados en label = a

select *
from table1
left join table2 using(id)
where label in ('a')

¿Hay alguna forma buena de lograr esto?
Supongo que necesitamos hacer una transposición.

Gracias

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, para obtener el resultado deseado, debes transponer los datos en la tabla2. Una posible solución es utilizar una combinación de subconsultas y declaraciones de caso para pivotar los datos. Aquí tienes un ejemplo:

    SELECT t1.id, t1.nombre,
           MAX(CASE WHEN t2.etiqueta = 'a' THEN t2.valor ELSE NULL END) AS a,
           MAX(CASE WHEN t2.etiqueta = 'b' THEN t2.valor ELSE NULL END) AS b
    FROM tabla1 t1
    LEFT JOIN (
      SELECT id, etiqueta, valor
      FROM tabla2
      WHERE etiqueta IN ('a', 'b')
    ) t2 ON t1.id = t2.id
    GROUP BY t1.id, t1.nombre
    

    En esta consulta, la subconsulta filtra los datos en la tabla2 para incluir solo las filas donde la etiqueta es ‘a’ o ‘b’. Luego, la consulta principal une la tabla1 y la tabla2 filtrada en función de la id y utiliza declaraciones de caso para pivotar los datos de modo que los valores ‘a’ y ‘b’ se muestren en columnas separadas. Finalmente, los resultados se agrupan por id y nombre.

    Esto debería darte el resultado deseado:

    id nombre a   b
    1  A      10  11
    3  B      16  17
    

Comments are closed.