1

我有两个表 L 列(代码、Qtr、Fy、Limit)和 R 列(代码、Qtr、Fy、Limit)。我想通过代码获得左右表组的限制总和,Qtr an 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

4

2 回答 2

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 之间的每个匹配一个),然后当您执行 a 时,sum您会得到不正确的结果。

于 2013-10-07T07:29:59.210 回答
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

(有一个有效的 SQL Fiddle 示例

请注意,这只会显示两个表中的行的结果。此外,LIMIT是一个保留字(在 MySQL 和其他一些 RDBMS 中),所以最好避免使用它作为列名。

于 2013-10-07T08:34:01.837 回答