2017-08-17 199 views
0

我有2个mysql表。第一张表格包含7条记录,第二张表格包含2条记录。第2表中的记录与第1表中的1条记录相关。当我试图从第一张和第二张表中获取金额字段的月份总额时,我从表1中获得了两倍的金额,第二张表中有两条记录。 查询如下:MYSQL从两个表组中由第一个表加上两个表的总数

SELECT DATE_FORMAT(a.prm_po_date, '%c'), 
     DATE_FORMAT(a.prm_po_date, '%M'), 
     sum(a.prm_po_amount), 
     sum(b.prm_inv_pay_amt) 
FROM prm_po_master a 
    LEFT JOIN prm_inv_payment_dtls b 
     ON a.prm_po_id = b.prm_inv_po_id_xref 
      AND b.prm_inv_pay_active_status = 'Y' 
WHERE  a.prm_po_dept = 'Information Technology' 
     AND a.prm_po_finyear = '2017-18' 
     AND a.prm_po_active_status = 'Y' 
GROUP BY month(a.prm_po_date) 
ORDER BY month(a.prm_po_date) 

1个图表数据prm_po_master和2台prm_inv_payment_dtls

(prm_po_id, prm_po_no, prm_po_ref_no, prm_po_finyear, prm_po_bdg_xref_no, prm_po_bdg_xref_ref, prm_po_bdg_id_xref, prm_po_date, prm_po_dept, prm_po_bdg_type, prm_po_vendor, prm_po_bdg_desc, prm_po_amount, prm_po_pay_terms, prm_po_exp_desc, prm_po_remarks, pro_po_dept_stake_holder, prm_po_invoice_amt_paid, prm_po_inv_payment_statys, prm_po_add_date, prm_po_add_user, prm_po_last_mnt_date, prm_po_last_mnt_user, prm_po_active_status, prm_po_file) VALUES 
    (1, 1, 'DLBIT/PO/1/2017-18', '2017-18', 7, 'DLBIT/7/2017-18', 7, '11-08-2017 00:00:00', 'Information Technology', 'OPEX', '10', 'AMC for Internet Banking Application', 200000.00, 'Monthly Equal Amount', 'First month AMC of Internet Banking', 'First Payent', 'SJ', 0.00, 'R', '11-08-2017 00:00:00', 'Prajith', '11-08-2017 00:00:00', 'Prajith', 'Y', 'uploads/pofiles/php_upload_2.rar'), 
    (2, 2, 'DLBIT/PO/2/2017-18', '2017-18', 7, 'DLBIT/7/2017-18', 7, '10-08-2017 00:00:00', 'Information Technology', 'OPEX', '10', 'AMC for Internet Banking Application', 300000.00, 'Monthly installment 2nd payment', '2nd payment of ', '2nd month payment', 'SJ', 0.00, 'R', '11-08-2017 00:00:00', 'Prajith', '11-08-2017 00:00:00', 'Prajith', 'Y', 'NIL'), 
    (3, 3, 'DLBIT/PO/3/2017-18', '2017-18', 1, 'DLBIT/1/2017-18', 1, '11-08-2017 00:00:00', 'Information Technology', 'OPEX', '1', 'AMC for Flexcube CBS Application', 1600000.00, 'Anual', 'AMC For customisation ', 'final payment', ' SJ', 0.00, 'R', '11-08-2017 00:00:00', 'Prajith', '11-08-2017 00:00:00', 'Prajith', 'Y', 'uploads/pofiles/php_upload_3.rar'), 
    (4, 4, 'DLBIT/PO/4/2017-18', '2017-18', 1, 'DLBIT/1/2017-18', 1, '11-08-2017 00:00:00', 'Information Technology', 'OPEX', '1', 'AMC for Flexcube CBS Application', 4000000.00, '2 years payment', 'Renewal of Oracle DB Lisance', 'amount for FY 17-18 and 18-19', ' Na', 0.00, 'R', '11-08-2017 00:00:00', 'Prajith', '11-08-2017 00:00:00', 'Prajith', 'Y', 'uploads/pofiles/php_upload_4.rar'), 
    (5, 5, 'DLBIT/PO/5/2017-18', '2017-18', 1, 'DLBIT/1/2017-18', 1, '11-08-2017 00:00:00', 'Information Technology', 'OPEX', '1', 'AMC for Flexcube CBS Application', 100000.00, 'Within two years', 'Renewal of Oracle DB Lisance', '2nd installment', 'Na', 0.00, 'R', '11-08-2017 00:00:00', 'Prajith', '11-08-2017 00:00:00', 'Prajith', 'Y', 'NIL'), 
    (8, 6, 'DLBIT/PO/6/2017-18', '2017-18', 8, 'DLBIT/8/2017-18', 8, '11-08-2017 00:00:00', 'Information Technology', 'OPEX', '12', 'AMC for AML Application', 200000.00, 'In 2 installments', 'AMC for AML App', '1st installment', 'TSR', 0.00, 'R', '11-08-2017 00:00:00', 'Prajith', '11-08-2017 00:00:00', 'Prajith', 'Y', 'NIL'), 
    (9, 7, 'DLBIT/PO/7/2017-18', '2017-18', 5, 'DLBIT/5/2017-18', 5, '11-08-2017 00:00:00', 'Information Technology', 'OPEX', '11', 'AMC for ATM Txn. Recon. Application', 210000.00, 'Single Payment', 'ATM Recon App', 'Finale payment', ' SJ', 0.00, 'R', '11-08-2017 00:00:00', 'Prajith', '11-08-2017 00:00:00', 'Prajith', 'Y', 'NIL') 


(prm_inv_pay_id, prm_inv_pay_date, prm_inv_ref_no, prm_inv_date, prm_inv_vendor, prm_inv_id_xref, prm_inv_po_id_xref, prm_inv_bd_id_xref, prm_inv_org_amount, prm_inv_pay_amt, prm_inv_pay_sgst, prm_inv_pay_cgst, prm_inv_pay_igst, prm_inv_pay_user, prm_inv_pay_user_design, prm_inv_pay_sys_date, prm_inv_settlment_stat, prm_inv_pay_fin_year, prm_inv_pay_dept, prm_inv_pay_active_status, prm_inv_payment_dtls, prm_inv_pay_dat_lat_mnt, prm_inv_pay_last_mod_user, prm_inv_paid_bank, prm_inv_paid_bank_acct, prm_inv_paid_bank_ifsc, prm_inv_reco_by, prm_inv_reco_thru, prm_inv_tds, prm_inv_reco_by_des, prm_inv_rec_thru_des, prm_inv_pay_no) VALUES 
(1, '17-08-2017 00:00:00', 'ORC/INV/123', '09-08-2017 00:00:00', '1', 1, 4, 1, 500000.00, 100000.00, 1000.00, 1000.00, 0.00, 'Prajith', 'Asst.Manager', '17-08-2017 00:00:00', 'P', '2017-18', 'Information Technology', 'Y', 'Testing', '17-08-2017 00:00:00', 'Prajith', '5', '000100100011111', 'SBIN0000001', ' Na', 'KK', 0.00, 'AGM', 'Senior Manager', 1), 
(2, '17-08-2017 00:00:00', 'ORC/INV/123', '09-08-2017 00:00:00', '1', 1, 4, 1, 500000.00, 50000.00, 500.00, 500.00, 0.00, 'Prajith', 'Asst.Manager', '17-08-2017 00:00:00', 'P', '2017-18', 'Information Technology', 'Y', 'test', '17-08-2017 00:00:00', 'Prajith', '5', '000100100011111', 'SBIN0000001', ' Na', 'KK', 0.00, 'AGM', 'Senior Manager', 2) 

请帮助。

预期的结果是,我试图从单个表中的两个表中获得金额的总和,明月。在上述八月份的金额总和。

有内加入,我得到了以下结果

(mon, mon_name, po_amt, paid_sum) VALUES 
('8', 'August', 4000000, 150000) 

左连接

(mon, mon_name, po_amt, paid_sum) VALUES 
('8', 'August', 2610000, NULL), 
('8', 'August', 4000000, 150000) 

预期结果

(mon, mon_name, po_amt, paid_sum) VALUES 
('8', 'August',6610000, 150000) 
+0

第1步。以日期存储日期。第2步。请参阅[为什么我应该为我所认为的非常简单的SQL查询提供一个MCVE](http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve对于什么似乎对我来说是一个非常简单的SQL查询) – Strawberry

回答

0

你应该加入总和的细节,而不是行

SELECT DATE_FORMAT(a.prm_po_date, '%c'), 
      DATE_FORMAT(a.prm_po_date, '%M'), 
      sum(a.prm_po_amount), 
      max(t.my_sum), 
    FROM prm_po_master a 
     LEFT JOIN ( 
      select prm_inv_po_id_xref, sum(prm_inv_pay_amt) as my_sum 
      prm_inv_payment_dtls 
      where prm_inv_pay_active_status = 'Y' 
      group by prm_inv_po_id_xref) t on t.prm_inv_po_id_xref = a.prm_po_id 
    WHERE  a.prm_po_dept = 'Information Technology' 
      AND a.prm_po_finyear = '2017-18' 
      AND a.prm_po_active_status = 'Y' 
    GROUP BY month(a.prm_po_date) 
    ORDER BY month(a.prm_po_date) 
+0

感谢您的帮助,但我得到2行而不是1行。 –

+0

期待1行输出,但获得2行。请帮助, –

+0

可能你需要一个内部连接..答案更新。 – scaisEdge