SQL 使用唯一键将多行合并为一行

SQL merge numerous rows into one single row using unique key

我的 table(用户)中有这样的数据 如您所见,user_id 9 已经用某些元数据填充了许多行。该用户在 39 行中根据他们的 user_id 记录了 39 个不同的 meta_values。

user_id meta_key meta_value
9 first_name 吉尔达
9 last_name 莉莉亚
9 电子邮件 测试@test.com

我真的很想转换数据,所以输出看起来像这样。

user_id first_name last_name
9 吉尔达 莉莉亚

和电子邮件,但我不知道如何在上面显示它 table。

在这个阶段,我有超过 3600 个独立用户,平均每个用户大约有 40 行。我希望能够根据需要向单行添加不同的 meta_values,所以实际上只是在为初始查询寻找一些帮助。

非常感谢您的帮助。

在你的数据库中创建一个 table 添加 4 行(在这里你可以创建任意多行)

1st row usersID 
2nd row firstname
3rd row lastname
And 4th row called email

进入你的编辑器
现在连接您的数据库插入值
像这样 *INSERT INTO your table name(userId, firstname, lastname, email) VALUES(从您的表单 HTML 或 PHP 添加值)

至于我下面的查询对你有帮助。在这里,我给 table 命名为 temp_user,你需要更改。

select [user_id],first_name, last_name, Email
from
(
  select [user_id],meta_key, meta_value
  from temp_user
) d
pivot
(
  MAX(meta_value)
  for meta_key in (first_name, last_name , Email)
) piv;

我会推荐条件聚合:

select user_id,
       max(case when meta_key = 'first_name' then meta_value end)as first_name,
       max(case when meta_key = 'last_name' then meta_value end)as last_name,
       max(case when meta_key = 'email' then meta_value end)as email
from t
group by user_id;

如果您希望所有 39 个键都作为列,您只需将其扩展为具有 39 个 max(case) 表达式。