简体   繁体   English

mysql两个表中两列的总和

[英]sum of two columns in two tables mysql

i am developing a LMS system for an institute and i am trying to develop a recovery report on the end of month the report contains student name total fee package, total received, total receiveable, current month pending installment 我正在为某机构开发LMS系统,并且试图在月底开发一份恢复报告,该报告包含学生姓名总费用,总收入,总收入,当月待付款

here is the installment data of a student with his admission id 这是学生的入学数据及其录取ID 在此处输入图片说明

and this is the ledger data from where ican pick the fee package and total receiveable fees 这是分类帐数据,我可以从中选择费用包和可收取的总费用

在此处输入图片说明

and i am using this query for recovery report 我正在使用此查询来恢复报告

SELECT 
SUM(l.dr)-SUM(l.cr) as sum_remaining, 
f.dr as fee_package, 
SUM(i.payment) as this_month_install,
a.reg_id, s.fname
FROM
ledger l, ledger f, student_data s, 
admissions a LEFT OUTER JOIN installments i ON a.admissionid = i.admissionid
WHERE 
a.admissionid = '58ac4b5421488' AND
a.reg_id = s.reg_id AND
l.reference = '58ac4b5421488' AND
l.details <> 'registration fee' AND
f.reference = '58ac4b5421488' AND
f.details = 'Fee Package' AND  
i.install_no <> '1' AND 
MONTH(i.pay_date) = '04' AND 
YEAR(i.pay_date) = '2017'
GROUP BY a.admissionid

and its giving the result like this 并给出这样的结果

在此处输入图片说明

but the result should be like 但结果应该像

sum_remaining = 10000 and this_month_install = 10000 please help me to sort out this problem Thanks in advance sum_remaining = 10000和this_month_install = 10000,请帮助我解决此问题

you should start from admission and use inner join for the others table (left join for installments) 您应该从准入开始,并对其他表使用内部联接(分期付款时使用左侧联接)

  SELECT 
    SUM(l.dr)-SUM(l.cr) as sum_remaining, 
    f.dr as fee_package, 
    SUM(i.payment) as this_month_install,
    a.reg_id, 
    s.fname
  FROM admissions a
  Inner JOIN ledger f ON f.reference = a.admissionid AND f.details = 'Fee Package' 
  INNER JOIN ledger l  ON l.reference = a.admissionid AND l.details <> 'registration fee'  
  INNER JOIN student_data s ON a.reg_id = s.reg_id
  LEFT  JOIN installments i ON a.admissionid = i.admissionid   AND i.install_no <> '1' 
  WHERE a.admissionid = '58ac4b5421488' 
  AND  MONTH(i.pay_date) = '04' 
  AND  YEAR(i.pay_date) = '2017'
  GROUP BY a.admissionid

you have two row in installments table that match .. try filter just one 您的分期付款表中有两行与..匹配,请尝试仅过滤一行

SELECT 
SUM(l.dr)-SUM(l.cr) as sum_remaining, 
f.dr as fee_package, 
SUM(i.payment) as this_month_install,
a.reg_id, 
s.fname
FROM admissions a
Inner JOIN ledger f ON f.reference = a.admissionid AND f.details = 'Fee Package' 
INNER JOIN ledger l  ON l.reference = a.admissionid AND l.details <> 'registration fee'  
INNER JOIN student_data s ON a.reg_id = s.reg_id
LEFT  JOIN installments i ON a.admissionid = i.admissionid 
                        AND i.install_no not in ( '1', '2') 
WHERE a.admissionid = '58ac4b5421488' 
 AND  MONTH(i.pay_date) = '04' 
AND  YEAR(i.pay_date) = '2017'
GROUP BY a.admissionid

i have done this with a sub query thanks all 我已经完成了一个子查询,谢谢大家

select  a.admissionid, s.fname, 
sum(l.dr)-SUM(l.cr) as sum_remaining, i.*, 
f.dr as fee_package from student_data s,  
ledger l, ledger f, admissions a 
RIGHT outer join (select admissionid, 
 sum(payment) as this_month_install 
 from 
 installments g where g.install_no <> '1' and MONTH(g.pay_date) = '04' and YEAR(g.pay_date) = '2017' group by g.admissionid) i

ON 
i.admissionid = a.admissionid where a.reg_id = s.reg_id and 
a.status = 'studying' and a.course = 'PH' and 
a.campus = 'CIFSD01' and l.reference = a.admissionid and 
l.details <> 'registration fee' and f.reference = a.admissionid 
and f.details = 'Fee Package' GROUP BY a.std_id

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM