两个表mysql中两列的总和

时间:2017-04-04 18:10:59

标签: mysql sql

我正在为研究所开发LMS系统 我正在尝试在月底制定一份恢复报告 该报告包含学生姓名总费用包,收到的总数,可收到的总数,当月待分期付款

这是具有录取ID的学生的分期付款数据 enter image description here

这是ican选择费用包和总可领取费用的分类帐数据

enter image description here

我正在使用此查询进行恢复报告

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

并且给出了这样的结果

enter image description here

但结果应该是

sum_remaining = 10000 和this_month_install = 10000 请帮我解决这个问题 提前致谢

2 个答案:

答案 0 :(得分:1)

你应该从录取开始,并使用内部联接为其他表(左连接分期付款)

  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

你在分期付款表中有两行匹配..尝试只过滤一次

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

答案 1 :(得分:0)

我用子查询完成了这个 谢谢所有

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