我想将两行中的不同列和不同行的值分组在同一列中想要放在不同列中的单行中。以下是我的表 如何将“不同行中的列”放置在“单列中的不同列”
例如,我想在单个row.In无1个& 2行的单个行,会有ref_no(两者相同行中),由(LEDGERNAME其VOUCHER_BY是博士),至(LEDGERNAME他的VOUCHER_BY是Cr),AMOUNT(两行相同)或者像这样 -
我使用了oracle数据库。我该如何做到这一点?
我想将两行中的不同列和不同行的值分组在同一列中想要放在不同列中的单行中。以下是我的表 如何将“不同行中的列”放置在“单列中的不同列”
例如,我想在单个row.In无1个& 2行的单个行,会有ref_no(两者相同行中),由(LEDGERNAME其VOUCHER_BY是博士),至(LEDGERNAME他的VOUCHER_BY是Cr),AMOUNT(两行相同)或者像这样 -
我使用了oracle数据库。我该如何做到这一点?
简单。自我加入:
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;
上REF_NO,AMOUNT
使用GROUP BY
,使MIN
和LEDGERNAME
MAX
会给你BY
和TO
。
以下解决方案应该工作:
SELECT REF_NO,min(LEDGERNAME) as 'BY',MAX(LEDGERNAME) as 'TO',AMOUNT
FROM [yourtable]
GROUP BY REF_NO,AMOUNT
我会更进一步,他由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
如果ledgername的顺序相反?这是一个不正确的方法。 – GurV