我有一个名为payment_info的表,并带有以下记录。postgresql - 将单行更改为多行
paymentid | customercode | previousbalance | paymentamount | remainingbalance
-----------------------------------------------------------------------------
PID0001 | CUST024 | 10000 | 2500 | 7500
PID0002 | CUST031 | 8500 | 3500 | 5000
PID0003 | CUST005 | 12000 | 1500 | 10500
然后,我想要的是创建一个3行上述表中的每行。 我希望我的结果看起来像这样。
Payment Group | Payment Line Item | Payment ID | Customer Code | Type | Amount
--------------------------------------------------------------------------------------------------
1 | 1 | PID0001 | CUST024 | PREVIOUS BALANCE | 10000.00
1 | 2 | | | PAYMENT AMOUNT | 2500.00
1 | 3 | | | REMAINING BALANCE | 7500.00
2 | 1 | PID0002 | CUST031 | PREVIOUS BALANCE | 8500.00
2 | 2 | | | PAYMENT AMOUNT | 3500.00
2 | 3 | | | REMAINING BALANCE | 5000.00
3 | 1 | PID0003 | CUST005 | PREVIOUS BALANCE | 12000.00
3 | 2 | | | PAYMENT AMOUNT | 1500.00
3 | 3 | | | REMAINING BALANCE | 10500.00
这是我开始的查询。但它没有返回与上面相同的结果。
select row_number() over() as id,paymentid,customercode,'PREVIOUS BALANCE' as type,previousbalance from payment_info
union
select row_number() over() as id,'','','PAYMENT AMOUNT' as type,paymentamount from payment_info
union
select row_number() over() as id,'','','REMAINING BALANCE' as type,remainingbalance from payment_info
有没有其他方法,我不会使用UNION关键字?因为在真正的表格中,我将使用30多列,查询数千条记录。
我也不知道如何从付款组(每个付款ID)和付款行项目(每个组)创建自动生成号码(ID)。
感谢
使用** UNION ALL **,它以低于UNION的成本自行返回所有行。另外:不能保证** row_number()over()**会产生所需的排序 - 使用EXPLICIT命令来保证排序。另见:http://stackoverflow.com/questions/1128737/unpivot-and-postgresql –
我可以添加你的'支付组'号码:) – flutter
按要求添加空格。 – flutter