payment_infoという名前のテーブルがあり、以下のレコードがあります。postgresql - 単一行を複数の行に変更する
paymentid | customercode | previousbalance | paymentamount | remainingbalance
-----------------------------------------------------------------------------
PID0001 | CUST024 | 10000 | 2500 | 7500
PID0002 | CUST031 | 8500 | 3500 | 5000
PID0003 | CUST005 | 12000 | 1500 | 10500
次に、上記の表の3行1行を作成します。 私の結果はこのように見えます。
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