You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL将多列拆分为含多条记录的单列?

如何将Person表的多name列转换为单name列的多行记录

你需要的是列转行操作,用UNION ALL就能轻松实现——把每个name字段和对应的phone_number单独拆成一条记录,再合并所有结果即可。

核心SQL代码

SELECT phone_number, name_1 AS name
FROM Person
WHERE name_1 IS NOT NULL -- 可选:过滤空值,避免生成无意义记录
UNION ALL
SELECT phone_number, name_2 AS name
FROM Person
WHERE name_2 IS NOT NULL
UNION ALL
SELECT phone_number, name_3 AS name
FROM Person
WHERE name_3 IS NOT NULL
UNION ALL
SELECT phone_number, name4 AS name -- 注意你表中的列名是name4,不是name_4
FROM Person
WHERE name4 IS NOT NULL;

代码说明

  • UNION ALL:将多个SELECT语句的结果合并成一个结果集,和UNION不同,它不会自动去重,适合保留所有有效name记录的场景
  • 每个SELECT单独取出phone_number和一个name列,用AS name把列名统一成你需要的name
  • WHERE name_x IS NOT NULL:避免某个name字段为空时,生成phone_number对应空name的无效记录,不需要过滤的话可以直接去掉这行

测试结果

用你提供的示例数据运行上述代码,会得到完全符合预期的结果:

phone_numbername
123Billy
123Bill
123Bi

内容的提问来源于stack exchange,提问作者Devcool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:10:25