我有两个桌子。一个带有静态信息(用户ID,用户名,Dob,村庄)的表。第二个表包含可变信息(用户ID,favourite_food)。一个用户可以吃几种喜欢的食物。
我想将两个表连接起来以输出而不重复记录。最喜欢的食物应该放在大面包里,但是每个用户的数量可以变化。
示例 表1
x86
表2
userid usernames dob village
2001 wallace 1963 olu
2002 John 1975 remba
2003 Maurice 1954 goro
2004 Patrick 1932 goro
2005 Emma 2000 chula
2006 Mary 1989 remba
2007 Anne 2001 sakwa
2008 Moses 1994 remba
2009 Agatha 1956 sori
预期产量
userid favourite_food
2001 fries
2002 rice
2003 potatoes
2004 chicken
2004 beef
2005 mutton
2001 pork
2003 chapati
2004 dhal
2006 fries
2007 carrot
2008 lamb
2009 bread
2009 corn
注意:目前尚无已知方法可以知道喜欢的食物的数量,也没有最大值。对于每个附加项,输出中应有一列。
我该怎么做?
答案 0 :(得分:1)
您没有说您正在使用哪个数据库。我在这里看到两个选择。要么你:
LISTAGG()
函数汇总最喜欢的食物列来生成一个“最喜欢的食物”列。答案 1 :(得分:0)
您在寻找我们的“数据”数据。您可以在Stackoverflow的此处找到答案:
SQL Server:How to pivot text columns in SQL Server?
MySql:
Select AA.uname,
max(case when nr=1 then ffood end) ff1,
max(case when nr=2 then ffood end) ff2,
max(case when nr=3 then ffood end) ff3,
max(case when nr=4 then ffood end) ff4
FROM (select BB.*,@rownum := case when buid=@lu then @rownum else 0 end + 1 as nr,
@lu:=buid
FROM BB,(SELECT @lu := 0, @rownum :=0) r order by buid) P
INNER JOIN AA ON auid=buid
GROUP BY auid
使用Mysql做枢纽并不是很复杂,但是,在这种情况下,我们还需要为各种喜欢的食物生成一个“行号”。在SQL Server中,您可以找到一个函数,而我们需要使用用户定义的变量和MySQL中的case
子句来实现相同的功能(列nr
)。
这是一个小演示: http://rextester.com/JDA89035