2016-05-13 1 views
-1

私は次のように一時テーブルを作成するテーブルのPostgreSQL:新しい行として2行の違い

 
Date,  employee transaction amount 
02-03-2015 e1   credit  400 
02-03-2015 e1   debit  25 
02-04-2015 e2   credit  600 
02-04-2015 e2   debit  35 
02-03-2015 e1   credit  400 
02-03-2015 e1   debit  250 

を持っている:

 
Date,  employee transaction amount 
02-03-2015 e1   credit  400 
02-03-2015 e1   debit  25 
02-03-2015 e1   NET_BAL  375 
02-04-2015 e2   credit  600 
02-04-2015 e2   debit  35 
02-04-2015 e2   NET_BAL  565 
02-04-2015 e1   credit  400 
02-04-2015 e1   debit  250 
02-04-2015 e1   NET_BAL  150 

誰かが助けてくださいもらえますか?私はこれがあなたそれを行うではなく、どのようにあなたはがそれをやるべきことができる方法であるSQL

+0

mysqlまたはpostgreql?あなたのノーです。行の固定または変更可能性がありますか? –

+0

postgreSQL。私は実際のDBテーブルを変更したくありません。 – Barman

答えて

0

に新しいです。 PostgreSQL(または他のいくつかのRDBMSシステム)でもデータを操作して非正規化された異種の結果を表示することができます。プレゼンテーション層はサーバからデータを取得し、分解してフォーマットします。

with 
    data (date, employee, transaction, amount) as (values 
    ('02-03-2015', 'e1', 'credit', 400), 
    ('02-03-2015', 'e1', 'debit', 25), 
    ('02-04-2015', 'e2', 'credit', 600), 
    ('02-04-2015', 'e2', 'debit', 35), 
    ('02-04-2015', 'e1', 'credit', 400), 
    ('02-04-2015', 'e1', 'debit', 250)), 
    net as (
    select date, employee, 'NET_BAL'::text as transaction, sum(case when transaction = 'debit' then -1 else 1 end * amount) as amount 
    from data 
    group by date, employee) 

select * from data 
union 
select * from net 
order by date, employee, transaction 
+0

ありがとう、それは私にどのように行うことができるかのアイデアを与えた。 – Barman

関連する問題