我在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;
提前致谢!
答案 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;