我有一个带有多个左连接的SQL查询,但其中一个连接有点复杂。使用下面的示例,我需要为第一个表中的每个ID输出一行。第二个表有每个ID的多行,由参数名称和值对组成,我试图输出如下所示。我只关心3个特定的参数名称。
我目前有多个问题。一个是我的连接让我添加“值”但是当我只想要一行时它为bob jones创建了多行。第二个是我只想要那3个特定的参数名称而忽略其余的名称。如果ID没有值,则返回NULL或留空。
ID first last
1 bob jones
2 joe dirt
num param value
1 color green
1 shape circle
1 food apple
2 color red
2 drink water
2 animal dog
期望的结果
ID first last color shape drink
1 bob jones green circle NULL
2 joe dirt red NULL water
答案 0 :(得分:-1)
按用户对数据进行分组,并使用条件聚合来获取每个用户的值
select t1.id, t1.first, t1.last,
max(case when t2.param = 'color' then t2.value end) as color,
max(case when t2.param = 'shape' then t2.value end) as shape,
max(case when t2.param = 'drink' then t2.value end) as drink
from table1 t1
left join table2 t2 on t1.id = t2.id
group by t1.id, t1.first, t1.last