2017-04-01 160 views
0

我有一個包含兩個MySQL表的項目;在一個SQL查詢中使用多個SQL查詢結果

  • LedgerSchedule
  • GeneralLedger

第一個表LedgerSchedule包含在GeneralLedger中使用的可能的類型。 GeneralLedger中的每條記錄都可以是CREDIT或DEBIT交易(來自類型LedgerSchedule)。

現在,如果我想用GeneralLedger交易創建交易調查,我在我的項目中運行三個查詢;

  • 每個LedgerSchedule選擇可能LedgerSchedule的
  • 選擇信用GeneralLedgers
  • 選擇借記GeneralLedgers每個LedgerSchedule

這三個查詢我保存(或借記CREDIT)後相當於回到每個LedgerSchedule 。 這有效,但速度很慢(特別是當有很多LedgerSchedule時)。 爲了加快速度,我想用一個MySQL查詢來完成。

總結我想選擇LedgerSchedule與他們的CREDIT/DEBIT GeneralLedgers金額在一個查詢。

第一次嘗試(在本例中,我只選擇LedgerSchedule的ID);

enter image description here

但這僅選擇使用借記卡和信用卡交易GeneralLedgers。將其更改爲

WHERE LS.ID = DEBIT.ID 
OR LS.ID = CREDIT.ID 

也不起作用。在此旁邊,我也想選擇沒有任何GeneralLedgers DEBIT/CREDIT交易的LedgerSchedule。

| LedgerSchedule | Debit | Credit | 
|  1  | €30.00 |   | 
|  2  |   | €23.45 | 
|  3  |   |   | 
|  4  | €15.15 | €10.00 | 
|  5  |   |   | 

我該如何做到這一點?也許即使沒有在一個查詢多個選擇...

+0

Jeeez所有的資本,使您的SQL一個痛苦的閱讀,有一個普遍的偏好,在一個SQL變量(如列名)較低的情況下,只控制單詞如「SELECT」用大寫字母表示,這使得它更具可讀性...... – Martin

+0

同樣的原因也是爲什麼道路標誌不是大寫字母,它是「較硬(較慢)」以理解大寫字母文字BLOCKS'。 – Martin

+0

編輯你的問題,並提供樣本數據和期望的結果。 –

回答

0

如果我理解正確的話,你只是想有條件聚集:

select gl.ledger_schedule_id, 
     sum(case when gl.debit_credit = 1 then gl.amount else - gl.amount 
      end) as net 
from GeneralLedger gl 
group by gl.ledger_schedule_id; 

如果debit_credit可以採取比0或1的值,你會想一個where子句來防止超量計算。

如果你想單獨金額:

select gl.ledger_schedule_id, 
     sum(case when gl.debit_credit = 1 then gl.amount end) as credit, 
     sum(case when gl.debit_credit = 0 then gl.amount end) as debit 
from GeneralLedger gl 
group by gl.ledger_schedule_id; 
+0

這是一個很好的方法戈登,但我需要顯示借方和貸方的金額,然後再計算每個LedgerSchedule的總計。 如果可用,查詢結果需要爲每個LedgerSchedule的所有LedgerSchedule和借方和/或貸方金額。 –

+0

確實,只是使用條件聚合:) –