2016-11-12 60 views
1

我想将两行中的不同列和不同行的值分组在同一列中想要放在不同列中的单行中。以下是我的表 enter image description here如何将“不同行中的列”放置在“单列中的不同列”

例如,我想在单个row.In无1个& 2行的单个行,会有ref_no(两者相同行中),由(LEDGERNAME其VOUCHER_BY是博士),至(LEDGERNAME他的VOUCHER_BY是Cr),AMOUNT(两行相同)或者像这样 - enter image description here

我使用了oracle数据库。我该如何做到这一点?

回答

2

简单。自我加入:

select d.ref_no, 
    d.ledgername by, 
    c.ledgername to, 
    d.amount 
from my_ledger_table d 
inner join my_ledger_table c on d.ref_no = c.ref_no 
    and d.voucher_by = 'Dr' 
    and c.voucher_by = 'Cr' 
    and d.amount = c.amount; 
0

REF_NO,AMOUNT使用GROUP BY,使MINLEDGERNAMEMAX会给你BYTO

以下解决方案应该工作:

SELECT REF_NO,min(LEDGERNAME) as 'BY',MAX(LEDGERNAME) as 'TO',AMOUNT 
    FROM [yourtable] 
    GROUP BY REF_NO,AMOUNT 
+1

如果ledgername的顺序相反?这是一个不正确的方法。 – GurV

0

我会更进一步,他由Kumar_Vikas解决方案。当voucher_by是Dr时,看起来海报想要“BY”列,当它是Cr时,它应该进入“TO”列。

SELECT REF_NO as ref_no 
     ,max(case when voucher_by='Dr' then LEDGERNAME end) as 'BY' 
     ,MAX(case when voucher_by='Cr' then LEDGERNAME end) as 'TO' 
     ,MAX(AMOUNT) as Amount 
    FROM [yourtable] 
GROUP BY REF_NO 
相关问题