PostgreSQL中如何将整数字段扩展为连续数值范围的SQL实现
可以用PostgreSQL纯SQL轻松实现,无需外部脚本
PostgreSQL内置的generate_series函数正好适合处理这种按行生成连续序列的需求,结合LATERAL关联就能快速得到你想要的展开结果。
生成目标结果集
直接执行以下SQL即可得到期望的展开数据:
SELECT t."Group", s.month AS Months, t.Value FROM Table1 t CROSS JOIN LATERAL generate_series(1, t.Months) AS s(month) ORDER BY t."Group", s.month;
直接创建目标表
如果需要直接生成DesiredOutput表,可使用CREATE TABLE AS语句:
CREATE TABLE DesiredOutput AS SELECT t."Group", s.month AS Months, t.Value FROM Table1 t CROSS JOIN LATERAL generate_series(1, t.Months) AS s(month) ORDER BY t."Group", s.month;
逻辑说明
generate_series(1, t.Months):为Table1中的每一行生成从1到该行Months值的连续整数序列。CROSS JOIN LATERAL:允许右侧的序列生成逻辑引用左侧表(Table1)当前行的Months值,实现逐行生成对应长度的序列并与原行数据关联。- 最终结果会自动将每个
Group的Months扩展为1到原数值的连续整数,同时保留对应的Value值。
内容的提问来源于stack exchange,提问作者markyoung
相关产品推荐
相关产品推荐

