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)
表达式。
我的 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)
表达式。