首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Access Vb6查询

Access Vb6查询
EN

Stack Overflow用户
提问于 2020-12-17 22:37:33
回答 2查看 153关注 0票数 1

我需要您的帮助,使用vb6和access db构建一个sql查询。下面是一个场景:2个表,给出并拥有Tb1字段Id、Name、Tb2 Id、Name、column,我需要有两个表中每个名称的总金额,这样就有了总计给列和总数有列,但我的查询不起作用。

代码语言:javascript
复制
Select tb1.id,tb1.name,sum(tb1.amount) as TG, tb2.id,tb2.name,sum(tb2.amount) as TH
from tb1 inner join 
     tb2
     on tb1.id=tb2.id
group by... Etc

如果我有10条记录,其中id =1在tb1上,3条记录在tb上,那么tb2上的总数是错误的(它重复了tb1上每条记录在tb2上的和)

我也尝试过使用Union在行中获得一个正确的结果,但是我应该想获得类似的结果

代码语言:javascript
复制
Id Name Have Give
1 John Doe 200,00 76,00

我希望用照片来解释得更好

Triyng @Parfait建议,获得的结果与我之前编写的查询非常相似。

提前感谢您的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-17 23:24:23

考虑通过id分别连接两个表的聚合

聚合查询(另存为存储访问查询)

代码语言:javascript
复制
SELECT tb1.idF
     , tb1.[name]
     , SUM(tb1.Give) AS TG
FROM tblGive tb1
GROUP BY tb1.idF
       , tb1.[name] 
代码语言:javascript
复制
SELECT tb2.IDB
     , tb2.[name]
     , SUM(tb2.Have) AS TH
FROM tblHave tb2
GROUP BY tb2.IDB
       , tb2.name

最终查询(运行以返回两个表中的所有不同名称)

代码语言:javascript
复制
SELECT NZ(agg1.idF, agg2.idB) AS [id]
     , NZ(agg1.name, agg2.name) AS [name]
     , NZ(agg2.TH, 0) AS [Have]
     , NZ(agg1.TG, 0) AS [Give]
FROM tblGiveAgg agg1
LEFT JOIN tblHaveAgg agg2
   ON agg1.idF = agg2.idB

UNION 

SELECT NZ(agg1.idF, agg2.idB) AS [id]
     , NZ(agg1.name, agg2.name) AS [name]
     , NZ(agg2.TH, 0) AS [Have]
     , NZ(agg1.TG, 0) AS [Give]
FROM tblGiveAgg agg1
RIGHT JOIN tblHaveAgg agg2
   ON agg1.idF = agg2.idB;

用下面的数据演示

代码语言:javascript
复制
CREATE TABLE tblGive (
   ID AUTOINCREMENT,
   IdF INTEGER,
   [Name] TEXT(10),
   Give INTEGER
);

INSERT INTO tblGive (IdF, [Name], [Give]) VALUES (1, 'JOHN', 37);
INSERT INTO tblGive (IdF, [Name], [Give]) VALUES (2, 'ANNA', 10);
INSERT INTO tblGive (IdF, [Name], [Give]) VALUES (3, 'BILL', -37);
INSERT INTO tblGive (IdF, [Name], [Give]) VALUES (2, 'ANNA', 116);
INSERT INTO tblGive (IdF, [Name], [Give]) VALUES (1, 'JOHN', 120);


CREATE TABLE tblHave (
   ID AUTOINCREMENT,
   IDB INTEGER,
   [Name] TEXT(10),
   Have INTEGER
);

INSERT INTO tblHave (IDB, [Name], [Have]) VALUES (1, 'JOHN', 200);
INSERT INTO tblHave (IDB, [Name], [Have]) VALUES (2, 'ANNA', 400);
INSERT INTO tblHave (IDB, [Name], [Have]) VALUES (3, 'BILL', 150);
INSERT INTO tblHave (IDB, [Name], [Have]) VALUES (1, 'JOHN', 25);
INSERT INTO tblHave (IDB, [Name], [Have]) VALUES (1, 'JOHN', 70);

最后的完全连接查询返回以下结果:

票数 1
EN

Stack Overflow用户

发布于 2020-12-17 22:39:39

尝试使用union all,然后聚合:

代码语言:javascript
复制
Select id, name, sum(tg) as tg, sum(th) as th
from (select id, name, amount as tg, 0 as th from tb1
      union all 
      select id, name, 0, amount from tbl2
     ) as t
group by id, name;

我不确定在union all子句中是否所有版本的MS Access都支持from。如果没有,则需要将该片段封装在视图中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65349339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档