sql - 如何在 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 以关系方式“拆分”行吗?
解决方案
我正在考虑通过一些过滤进行横向连接:
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';
推荐阅读
- c# - .NET Core WebApi 从中间件向用户返回未经授权的代码
- mysql - MySQL 服务器在使用 CONVERT_TZ 时卡住了
- python - 使用 API 时使 log.html 更详细
- html - 浏览器调整大小工具与显示分辨率
- javascript - Javascript:未捕获的 TypeError:window.setTimeout(...) 不是函数
- ruby-on-rails - 如何将 Helper 包含到补丁中
- excel - Excel:输入的数字与显示的数字与存储在内存中的数字
- android - “索引:0,大小:0 查看绘制错误”Android Studio 设计选项卡错误
- node.js - 从 Web 访问 Telegram 频道时如何关闭弹出窗口?
- google-data-studio - google-data-studio 将大多数维度值分组到其他类别中