我想將兩行中的不同列和不同行的值分組在同一列中想要放在不同列中的單行中。以下是我的表 如何將「不同行中的列」放置在「單列中的不同列」
例如,我想在單個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