我有两个表L列(Code,Qtr,Fy,Limit)和R with(Code,Qtr,Fy,Limit)。我希望按代码得到左右表组的限制,Qtr和Fy
以下查询运行时没有错误但输出错误,任何人都可以帮助我获得正确的输出。如果我只使用一个表,它可以正常工作。我猜问题是加入
select L.Code, L. Qtr, L.FY, sum(L.limit),sum(R.Limit)
from tbl L,tbl R Where
L.Code=R.Code AND
L.Qtr=R.Qtr AND
L.FY=R.FY
group by L.Code,L.Qtr,L.FY
示例数据(该表还包含其他列,但此处我只保留选中)
Tbl L
Code Qtr, Fy Limit
001 1 70 200
001 1 70 700
001 2 70 500
001 2 70 300
Table R
Code Qtr Fy Limit
001 1 70 1000
001 1 70 200
001 2 70 50
001 2 70 125
Result
Code Qtr Fy Sum(l.Limit) sum(R.Limit)
001 1 70 900 1200
001 2 70 800 175
我正在使用Mysql
答案 0 :(得分:1)
尝试此查询:
select code, qtr, fy, sum(lsum), sum(rsum)
from (
select L.Code, L.Qtr, L.FY, L.limit as lsum, 0 as rsum
from L
union all
select R.Code, R.Qtr, R.FY, 0 as lsum, R.limit as rsum
from R) as combined
group by code, qtr, fy
在这种情况下使用join
是一个错误的想法,因为它会创建多个记录(L和R之间的每个匹配一个记录),然后当你执行sum
时会得到不正确的结果。< / p>
答案 1 :(得分:1)
问题确实是加入 - 特别是,当您在加入时使用GROUP BY
时,当加入条件导致非唯一行时,您遇到了问题。通常,解决此问题的方法是在>>之前对进行分组:
SELECT L.code, L.qtr, L.fy, L.lim as L_lim, R.lim as R_lim
FROM (SELECT code, qtr, fy, SUM(lim) as lim
FROM L
GROUP BY code, qtr, fy) L
JOIN (SELECT code, qtr, fy, SUM(lim) as lim
FROM R
GROUP BY code, qtr, fy) R
ON R.code = L.code
AND R.qtr = L.qtr
AND R.fy = L.fy
(有一个working SQL Fiddle example)
请注意,这只会显示两个表中的行的结果。此外,LIMIT
是一个保留字(在MySQL和其他一些RDBMS中),因此最好避免使用列名。