在Oracle Sql中,在特定列处将两行合并为一行

在Oracle Sql中,在特定列处将两行合并为一行,sql,oracle,Sql,Oracle,我有一个存储事务的表,如果这个fomat Tran_date tran_id account_number tran_type amount 21-07-2017 M23 1234567890 D 50000 21-07-2017 M23 0987654321 C 50000 21-07-2017 M24 7654328900 D 20000 21-07-2017 M24 884587

我有一个存储事务的表,如果这个fomat

Tran_date  tran_id account_number tran_type amount
21-07-2017 M23     1234567890         D      50000
21-07-2017 M23     0987654321         C      50000
21-07-2017 M24     7654328900         D      20000
21-07-2017 M24     8845874588         C      20000
这是两项交易的借方和贷方。对于每一笔交易,我都需要在一行报告:

Tran_date  tran_id  src_acct    dest_acct   Amount
21-07-2017  M23     1234567890  0987654321  50000
21-07-2017  M24     7654328900  8845874588  20000
我已尝试按帐号选择帐号分组的最大值,但仍会得到单独的行。如何进行此操作?

您可以为此使用条件聚合:

SELECT Tran_date, tran_id, MAX(Amount) AS Amount
       MAX(CASE WHEN tran_type = 'D' THEN account_number END) AS src_acct,
       MAX(CASE WHEN tran_type = 'C' THEN account_number END) AS dest_acct
FROM mytable
GROUP BY Tran_date, tran_id

查询假设
'D'
'C'
记录之间的金额相同

加入也可以。假设
(传输id,传输类型)
是唯一的

SELECT td.Tran_date, td.tran_id, td.account_number as src_acct, tc.account_number as dest_acct, td.Amount
FROM mytable td
JOIN mytable tc ON td.tran_type = 'D' AND tc.tran_type = 'C'AND tc.tran_id = td.tran_id;