我有一张这样的样品台
col1 col2 col3 num1 num2
------------------------------------
val1 val2 val3 1 5
val4 val5 val6 7 15
val7 val8 val9 18 26
我想让行变成num2和num1之间的差。例如,我希望第一行是4行(5-1=4)。
预期结果:
col1 col2 col3 num1 num2
------------------------------------
val1 val2 val3 1 5
val1 val2 val3 1 5
val1 val2 val3 1 5
val1 val2 val3 1 5
val4 val5 val6 7 15
val4 val5 val6 7 15
val4 val5 val6 7 15
val4 val5 val6 7 15
val4 val5 val6 7 15
val4 val5 val6 7 15
val4 val5 val6 7 15
val4 val5 val6 7 15
val7 val8 val9 18 22
val7 val8 val9 18 22
val7 val8 val9 18 22
val7 val8 val9 18 22
这里的答案是postgresql:如何复制一行,没有主键可以复制吗?还是绝对需要pk?那么实现这一目标最有效的方法是什么?我正在考虑使用for循环作为通用编程,但我相信使用sql有一种更简单的方法
2条答案
按热度按时间o8x7eapl1#
您可以使用generate\ u series()来:
在线示例
如果要将这些行插入表中,请在
INSERT
在它前面:在线示例
包含负差(num2<num1)并删除不必要的原始行
im9ewurl2#
可以使用递归cte生成重复行,然后使用
INSERT...SELECT
查询以插入它们:输出
sqlfiddle演示