查看日期递增

时间:2019-07-20 00:30:46

标签: sql postgresql

我有一个带有列的postgres表Prop

date date,
ins1 integer,
insamt1 numeric,
ins2 integer,
insamt2 numeric,
ins3 integer,
insamt3 numeric
ins4 integer,
insamt4 numeric

ins1,ins2 ....表示月份数,insamt1,insamt2 ...表示金额。该表是从dbf导入的旧数据表。所以我必须使用这种结构。

表中的一个示例行:

'2017-03-15', 2, 12000.00, 3, 10000.00, 1, 14000.00, 4, 8000

是否可以像这样创建视图?

   date      amount
'2017-04-15' 12000
'2017-05-15' 12000
'2017-06-15' 10000
'2017-07-15' 10000
'2017-08-15' 10000
'2017-09-15' 14000

....

或者我应该构造一个新表并通过脚本插入数据。 使用 Postgres 9.4

编辑:该金额应从客户同意每月支付的公司客户处支付。

1 个答案:

答案 0 :(得分:1)

我认为您可以为此使用横向连接:

select date + ins * interval '1 month', insamt
from t cross join lateral
     (values (ins1, insamt1),
             (ins2, insamt2),
             (ins3, insamt3),
             (ins4, insamt4)
     ) v(ins, insamt);

编辑:

哦,我想我明白了

select date + gs.i * interval '1 month',
       v.insamt
from t cross join lateral
     generate_series(1, ins1 + ins2 + ins3 + ins4) gs(i) cross join lateral
     (values (1, ins1, insamt1),
             (ins1 + 1, ins1 + ins2, insamt2),
             (ins1 + ins2 + 1, ins1 + ins2 + ins3, insamt3),
             (ins1 + ins2 + ins3 + 1, ins1 + ins2 + ins3 + ins4, insamt4)
     ) v(s, e, insamt)
where gs.i between v.s and v.e;