首页 > 解决方案 > 如何在 PostgreSQL 中将行拆分为两行?

问题描述

有一个data_table四列。我正在尝试编写一个SELECT语句,根据type列中的值将每个初始行转换为一或两行。

例如,当type = 'X'row(a,b,c)转换为(a,b)and(a,c)时,否则为 just (a,b)

初始数据表

|  a   |  b  |  c  |  type
---------------------------
|  1   |  2  |  3  |   X  
|  4   |  5  |  6  |   Y
---------------------------

查询结果

|  first   | second |  type
---------------------------
|    1     |   2    |   X  
|    1     |   3    |   X  
|    4     |   5    |   Y
---------------------------

你能帮我找出如何仅使用 SQL 以关系方式“拆分”行吗?

标签: sqlpostgresql

解决方案


我正在考虑通过一些过滤进行横向连接:

select v.*
from t cross join lateral
     (values (a, b, type),
             (a, c, nullif(type, 'Y'))
     ) v(first, second, type)
where type is not null;

但是union all也可以很好地工作:

select a, b, type
from t
union all
select a, b, type
from t
where type = 'X';

推荐阅读