我有一个带有列的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
编辑:该金额应从客户同意每月支付的公司客户处支付。
答案 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;