2015-10-15 73 views
2

顯示一列我有兩個表子查詢到一個表作爲兩個單獨的列

Ledgers Table 
============== 
ledger_id ledger_name open_bal close_bal dr_bal cr_bal 
--------- --------- --------- --------- ------ ------ 
1   Bank A/C  0  5000  5000  0    
2   Capital A/C  0  -50000  0   50000   
3   Cash A/C  0  30700  53500  22800  


Transactions Table 
============== 
trans_id trans_date ledger_id ledger_name amount trans_type 
--------- --------- --------- --------- --------- --------- 
1   2004-01-01 3   Cash A/C  50000 Dr     
2   2004-01-01 2   Cap A/C  50000 Cr      
3   2004-01-02 9   Purchase A/C 10000 Dr     

這是我的表,有什麼想實現是讓賬簿餘額特定月份。這裏不是試圖將數據插入到表中。

使用上面兩個表我只需要查詢和出把結果作爲

Desired Output 
==============  

ledger_id ledger_name amount trans_type As Debit trans_type as Credit 
--------- --------- ------ ---------   --------- 
3   Cash A/C  50000  Dr    Null 
2   Capital A/C 50000  Null     Cr 

所以分別顯示在這裏TRANS_TYPE場DR作爲借方和鉻作爲學分。這是我想要實現的。

我到現在爲止所嘗試的是加入交易表與分類帳!但是,通過查詢這兩個表,我無法獲得所需的輸出結果。

這是我曾經嘗試過,

SELECT tr.trans_date, tr.amount, tr.ledger_id, l.ledger_name, tr.trans_type 
FROM tbl_transaction tr LEFT JOIN tbl_ledgers l 
ON l.ledger_id = tr.ledger_id WHERE trans_date BETWEEN '2004-01-01' AND '2004-01-31'; 

所以我基本上想知道如何才能實現這一目標? trans_type列拆分成兩個「Dr」分開和「Cr」分開?

+0

您可以在此更改示例輸出以顯示實際存在於「交易」表中的行嗎?您發佈的示例沒有'ledger_id = 1'的行,儘管我認爲我理解了這個要求,但是看到_exactly_是給定示例輸入應該生成的輸出很有幫助。 –

+0

我想澄清的另一件事 - 這看起來像只將Dr,Cr分隔爲單獨的列,但在一列中列出了相關的「數量」。這是正確的,還是有意爲每個分類賬編號創建一個聚合「SUM()」? –

+0

@MichaelBerkowski,是的你是對的,我只想把Dr,Cr分成不同的欄目,並在欄目中填入金額。 – shiva86

回答

1

您可以使用CASE檢查trans_type的實際值並顯示它,爲每個別名Debit, Credit這樣做一次。這會使用多個值而變得笨拙,但由於您只有兩個值,所以它是一種簡單的方法。

SELECT 
    tr.ledger_id, 
    l.ledger_name, 
    tr.amount, 
    CASE WHEN tr.trans_type = 'Dr' THEN tr.trans_type ELSE NULL END AS Debit, 
    CASE WHEN tr.trans_type = 'Cr' THEN tr.trans_type ELSE NULL END AS Credit 
FROM 
    tbl_transaction tr 
    LEFT JOIN tbl_ledgers l ON l.ledger_id = tr.ledger_id 
WHERE 
trans_date BETWEEN '2004-01-01' AND '2004-01-31'; 

這裏是一個演示:http://sqlfiddle.com/#!9/f5623/2

注意,這裏使用一個LEFT JOIN,導致ledger_id = 9在示範返回(比你的例子不同)。將其更改爲INNER JOIN會更正此問題。 (http://sqlfiddle.com/#!9/f5623/3

+0

完美的答案,取得了理想的結果,_非常感謝你。 – shiva86

0

嘗試這種情況:

SELECT IIf([trans_type]='dr',[trans_type],"") AS debit, IIf([trans_type]='cr',[trans_type],"") AS credit 
FROM tr; 

此代碼創建的IF語句,確定[TRANS_TYPE]字段是否是「CR」或'博士和在TRANS_TYPE(「CR」或「博士返回值')如果條件滿足或者在條件不滿足時返回空白(「」)。

+0

請解釋這是做什麼或爲什麼它的作品。 –

相關問題