如何根据数据库表字段值将单行记录拆分为1行或2行输出
实现方案
你可以通过以下两种常用SQL方案实现需求:
方案1:通用UNION方案(兼容所有SQL数据库)
直接通过UNION合并两个单位列的查询结果即可,UNION自带的去重特性会自动合并单位相同的重复行:
SELECT item_name, unit_1 AS unit FROM items UNION SELECT item_name, unit_2 AS unit FROM items ORDER BY item_name, unit;
逻辑说明:
- 第一条查询取出所有商品的
unit_1作为单位 - 第二条查询取出所有商品的
unit_2作为单位 - 两个结果集通过
UNION合并时,同商品同单位的重复行会被自动剔除,最终输出刚好符合你的要求。
方案2:LATERAL JOIN方案(适用于PostgreSQL、MySQL 8.0+、SQL Server等支持横向连接的数据库)
如果后续可能扩展更多单位列,这种写法的扩展性更好:
SELECT t.item_name, u.unit FROM items t JOIN LATERAL ( SELECT DISTINCT unit FROM (VALUES (t.unit_1), (t.unit_2)) AS v(unit) ) u ON TRUE ORDER BY t.item_name, u.unit;
逻辑说明:
- 把每条记录的两个单位字段构造成临时行数据,通过
DISTINCT去重后再和原表关联,即可得到拆行后的结果。
两种方案代入你的示例数据后,都会得到你预期的输出结果。
内容的提问来源于stack exchange,提问作者jove0610
相关产品推荐
相关产品推荐

