sql - 将作为范围的单元格值展平为列
问题描述
我有一个表格,其中有一列用于文档的页面范围,并且想要扩展表格,以便该范围中的每一页都是它自己的行。
我有:
| document | type | page_range |
| -------- | ---- | ---------- |
| 1 | A | 1-3 |
| 2 | B | 4-5 |
我想:
| document | type | pages |
| -------- | ---- | ----- |
| 1 | A | 1 |
| 1 | A | 2 |
| 1 | A | 3 |
| 2 | B | 4 |
| 2 | B | 5 |
解决方案
你可以
- 使用提取范围界限
regexp_extract
- 使用将范围边界转换为值列表
sequence
- 使用扁平化
CROSS JOIN UNNEST
像这样:
SELECT id, x
FROM (VALUES ('A', '1-3'), ('B', '4-5')) t(id, range)
CROSS JOIN UNNEST (
sequence(
CAST(regexp_extract(range, '(\d+)-(\d+)', 1) AS bigint),
CAST(regexp_extract(range, '(\d+)-(\d+)', 2) AS bigint))
) s(x);
示例输出:
presto> SELECT id, x
-> FROM (VALUES ('A', '1-3'), ('B', '4-5')) t(id, range)
-> CROSS JOIN UNNEST (
-> sequence(
-> CAST(regexp_extract(range, '(\d+)-(\d+)', 1) AS bigint),
-> CAST(regexp_extract(range, '(\d+)-(\d+)', 2) AS bigint))
-> ) s(x);
id | x
----+---
A | 1
A | 2
A | 3
B | 4
B | 5
(5 rows)
推荐阅读
- vb.net - RPC 服务器不可用(vb.net 中的 Outlook)
- nlp - 段落向量或 Doc2vec 模型大小
- html - 在进行一些条件检查后,将 fontawesome 检查添加到 *ngFor 中的各个选项标签
- nginx - kubernetes,ingress-nginx 重定向时省略端口
- core-data - Ensembles 是否支持新的 UUID 实体属性类型?
- elasticsearch - 弹性搜索存在查询的工作方式相反
- javascript - 我正在尝试使用 js 将列表链接到共享点网站,该列表是实用程序合同,我想从该列表中恢复特定列
- python - 如何按某个字段订购 Many2many 字段(树视图)?
- asp.net - 打印预览在 godady 中不起作用
- c++ - 如何显示矢量
MSVC 上的图像