2014-11-06 5 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

왜, 당신은 하나 개의 계정에 4600''있어 -28100''3-01-0001의 순 양 다른 쪽은'11400'입니까? 4600 + 11400 = 28100은 어떻게 할 수 있습니까? –

+0

@Marc B, 죄송합니다. 내 예제 테이블입니다. – khizar123456

답변

0

먼저이 두,563를 사용하는 하나 개의 테이블을 작성해야.

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 : BY GROUP을 사용하여 그런 다음 단순히 데이터를 집계 http://sqlfiddle.com/#!2/07a12/10