2017-08-17 196 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