SQL - 在一个匹配多行并放入多列的表上的JOIN

时间:2018-01-16 21:29:01

标签: mysql sql sql-server

我有一个带有多个左连接的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

1 个答案:

答案 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