2014-11-06 65 views
0

我有兩個mysql表,一個是tblvouchers,另一個是tblinvoices,我正在開發一個小型會計系統。 這兩個表都有不同的字段帳戶代碼,借記卡和信用額度字段等。現在我想從兩個表中計算總淨餘額 代碼明智我用多個小臨時表和查詢實現這一點,但我想用單個查詢來實現這一點,請任何人指導我如何實現這與單個MySQL查詢。來自多個MySQL表的淨收益

我的示例表如下。

TBLVOUCHERS

VOU_ACC_CODE DR_AMOUNT CR_AMOUNT 
------------ --------- ----------- 
3-01-0001    0   4600 
3-01-0002   10000   0 
3-01-0005   15000   0 
6-02-0001    0  27500 
6-02-0002    0  315432 
6-03-0001   27500   0 

TBLINVOICES

ACCOUNT_CODE DR_AMOUNT CR_AMOUNT 
------------ --------- ----------- 
3-01-0001    0  11400 
3-01-0005    0  10454.2 
3-01-0001    0   4600 
3-01-0001    0   7500 
6-01-0002   1250   0 
6-02-0007    0   750 
7-01-0001    0   1250 


ACCOUNT_CODE DR_AMOUNT CR_AMOUNT NET_BALANCE 
------------ --------- ----------- ----------- 
3-01-0001   0  28100  -28100 
3-01-0002  10000   0  10000  
3-01-0005 4545.8   0  4545.8 
6-02-0001   0  27500  -27500 
6-02-0002   0  315432  -315432 
6-02-0007   0  750   -750 
6-03-0001  27500   0   27500 
7-01-0001   0  1250   -1250 

我的PHP代碼:

$empty = mysql_query("TRUNCATE `tblaccountingledger`"); 
    $VOUCHERS = mysql_query(" 
    INSERT INTO `tblaccountingledger` 
    SELECT 
    `tblvouchers`.`VOU_DATE`, 
    `tblvouchers`.`VOU_NO`, 
    `tblvouchers`.`BILL_NO`, 
    `tblvouchers`.`VOU_CROSS_ACC_CODE`, 
    `tblcharts`.`ACC_NAME`, 
    `tblvouchers`.`VOU_NARRATION`, 
    `tblvouchers`.`DR_AMOUNT`, 
    `tblvouchers`.`CR_AMOUNT` 
    FROM 
    `tblvouchers` 
    INNER JOIN `tblcharts` 
     ON (
     `tblvouchers`.`VOU_CROSS_ACC_CODE` = `tblcharts`.`ACC_CODE` 
    ) 
    WHERE `tblvouchers`.`VOU_ACC_CODE` = '".$ACC_CODE."' 
    AND `tblvouchers`.`VOU_DATE` BETWEEN '".$START_DATE."' 
    AND '".$END_DATE."'; 
    "); 


    $INVOICES = mysql_query(" 
    INSERT INTO `tblaccountingledger` 
    SELECT 
    `tblinvoices`.`INVOICE_DATE`, 
    `tblinvoices`.`INVOICE_NO`, 
    `tblinvoices`.`BILL_NO`, 
    `tblinvoices`.`CROSS_ACCOUNT_CODE`, 
    `tblcharts`.`ACC_NAME`, 
    `tblinvoices`.`NARRATION`, 
    `tblinvoices`.`DR_AMOUNT`, 
    `tblinvoices`.`CR_AMOUNT` 
    FROM 
    `shop_system`.`tblinvoices` 
    INNER JOIN `shop_system`.`tblcharts` 
     ON (
     `tblinvoices`.`CROSS_ACCOUNT_CODE` = `tblcharts`.`ACC_CODE` 
    ) 
    WHERE `tblinvoices`.`ACCOUNT_CODE` = '".$ACC_CODE."' 
    AND `tblinvoices`.`INVOICE_DATE` BETWEEN '".$START_DATE."' 
    AND '".$END_DATE."'; 
    "); 
+0

爲什麼淨額爲3-01-0001'-28100',那麼你已經在一個帳戶了'4600'和另一個'11400'? 4600 + 11400 = 28100怎麼樣? – 2014-11-06 19:02:23

+0

@Marc B,對不起,這是我的示例表。 – khizar123456 2014-11-06 19:04:19

回答

0

首先,你需要從這兩使用創建一個表。

SELECT VOU_ACC_CODE, SUM(DR_AMOUNT), SUM(CR_AMOUNT), (SUM(DR_AMOUNT) - SUM(CR_AMOUNT)) AS NET_BALANCE FROM 
    (SELECT VOU_ACC_CODE, DR_AMOUNT, CR_AMOUNT FROM TBLVOUCHERS 
    UNION ALL 
    SELECT ACCOUNT_CODE AS VOU_ACC_CODE, DR_AMOUNT, CR_AMOUNT FROM TBLINVOICES) AS tbl1 
GROUP BY VOU_ACC_CODE 

見SQLFiddle:使用GROUP BY然後你只需彙總數據http://sqlfiddle.com/#!2/07a12/10