SQL使用唯一键将多行合并为一行
Posted
技术标签:
【中文标题】SQL使用唯一键将多行合并为一行【英文标题】:SQL merge numerous rows into one single row using unique key 【发布时间】:2021-07-24 10:37:07 【问题描述】:我的表(用户)中有类似这样的数据如您所见,user_id 9 已用某些元数据填充了许多行。该用户的 user_id 记录了 39 个不同的 meta_values,共 39 行。
user_id | meta_key | meta_value |
---|---|---|
9 | first_name | Gilda |
9 | last_name | Lilia |
9 | test@test.com |
我真的很想转换数据,使输出看起来像这样。
user_id | first_name | last_name |
---|---|---|
9 | Gilda | Lilia |
还有电子邮件,但我不知道如何在上表中显示。
在这个阶段,我有超过 3600 个唯一用户,平均每个用户大约有 40 行。我希望能够根据需要向单行添加不同的元值,所以真的只是为初始查询寻找一些帮助。
非常感谢您的帮助。
【问题讨论】:
将是一个支点。 See this. @PaulT。对,就是那样。然而,我刚刚学到了一个新东西。谢谢 根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。 【参考方案1】:以下查询对我有帮助。在这里,我将表名命名为 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;
【讨论】:
【参考方案2】:在你的数据库中创建一个表添加 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 添加值)
【讨论】:
【参考方案3】:我会推荐条件聚合:
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)
表达式。
【讨论】:
以上是关于SQL使用唯一键将多行合并为一行的主要内容,如果未能解决你的问题,请参考以下文章