访问选择 - 将table1与table2的总和值组合在一起

时间:2016-04-17 21:00:35

标签: sql ms-access select

我在Access 2010中有两个表:

TAB1:

Key|ValTab1
  1|    100
  2|    200
  3|    300

TAB2:

Key|ValTab2
  1|   1000
  1|   7000
  3|   3000
  4|   4000

期望的结果:

Key|    Val
  1|   8100
  2|    200
  3|   3300

是否可以在不将所有内容都选择到一个表中然后对所有内容进行分组(在Microsoft Access中)的情况下执行此操作?像

这样的东西
SELECT Tab1.Key,Sum(Tab1.ValTab1+IIF(Tab2.ValTab2 Is Null,0,Tab2.ValTab2)) AS Val
FROM Tab1 LEFT JOIN Tab2 
ON Tab1.Key = Tab2.Key
GROUP BY Tab1.Key;

但这导致Key 1 / Val 8 2 00

问题#2:

将Tab1扩展为

Cat|Key|ValTab1
  1|  1|    100
  1|  2|    200
  1|  3|    300
  2|  4|     20
  3|  5|      1

是否可以使用Tab1.Key = Tab2.Key与Cat建立连接以获得Sum(ValTab1 + ValTab2)?

  

对问题#1应用FuzzyTree的解决方案{{1}:

这意味着类似

max(tab1.val) + sum(tab2.val)

获得理想的结果:

SELECT Tab1.Cat, Max(Tab1.ValTab1) + Sum(IIF(Tab2.ValTab2 Is Null,0,Tab2.ValTab2)) AS Val
FROM Tab1 LEFT JOIN Tab2 
ON Tab1.Key = Tab2.Key
GROUP BY Tab1.Cat;

提前致谢!

2 个答案:

答案 0 :(得分:0)

如果tab1中的键是唯一的,那么您应该只添加一次值,您可以使用sum(tab1.val) + sum(tab2.val)

即。

SELECT Tab1.Key, Sum(Tab1.ValTab1) + Sum(Tab2.ValTab2) AS Val
FROM Tab1 LEFT JOIN Tab2 
ON Tab1.Key = Tab2.Key
GROUP BY Tab1.Key;

答案 1 :(得分:0)

我认为在这种情况下,相关子查询可能最简单:

select tabl1.*,
       (tab1.valtab1 +
        (select sum(valtab2)
         from tab2
         where tab2.key = tab1.key
        )
       ) as val
from tab1;

您可能需要使用nz()

select tabl1.*,
       (tab1.valtab1 +
        nz((select sum(valtab2)
            from tab2
            where tab2.key = tab1.key
           ), 0)
       ) as val
from tab1;