在两个表上分组并在结果VBA ADODB SQL查询上执行左连接
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在两个表上分组并在结果VBA ADODB SQL查询上执行左连接相关的知识,希望对你有一定的参考价值。
我想在两个csv文件上执行Group BY
,然后通过Excel中的VBA ADO查询对两个表的结果执行左连接。我的最终动机是打印记录集。
这是我到目前为止所做的。
SELECT * FROM (
SELECT f1.[c3],
f1.[c4],
f1.[c5],
f1.[c6],
Sum(f1.[c8]) AS SUMDATA
FROM test1.csv F1
GROUP BY f1.[c3],
f1.[c4],
f1.[c5],
f1.[c6]) AS f3
LEFT JOIN SELECT * FROM (
SELECT f2.[c3],
f2.[c4],
f2.[c5],
f2.[c6],
Sum(f2.[c8]) AS SUMDATA
FROM test2.csv f2
GROUP BY f2.[c3],
f2.[c4],
f2.[c5],
f2.[c6]) AS f4
on f3.[c3]+ f3.[c4]+ f3.[c5]+ f3.[c6] = f4.[c3]+ f4.[c4]+ f4.[c5]+ f4.[c6]
WHERE f3.[SUMDATA] <> f4.[SUMDATA]
这显示语法错误。怎么实现这个?任何帮助深表感谢。 TIA。
更新 -
我设法在2个表之间实现1个LEFT JOIN
和2个GROUP BYs
。根据请求,这里有关于我的数据集的一些细节。它由字段组成 - c1,c2 .... c8。 c8是我的目标领域。
我的预期输出 - 我不需要输出表中的c7,c1和c2。 c7,c1和c2的信息无关紧要。我需要用我的数据做5件事。
- 组基于CSV文件1中的c3,c4,c5和c6字段对c8字段求和,并将目标字段存储为SUMDATA
- 组基于CSV文件2中的c3,c4,c5和c6字段对c8字段求和,并将目标字段存储为SUMDATA
- 在CSV1和CSV2之间找到不匹配的SUMDATA字段条目(我在连接的c3,c4,c5,c6字段上使用了
LEFT JOIN
) - 查找CSV1中存在但CSV2中不存在的条目
- 查找CSV2中存在但CSV1中不存在的条目
目前,我设法编写直到第3步的代码。我需要暂时存储我从步骤1和2获得的分组表,以执行步骤4和5,这可以通过另外两个UNION
,LEFT JOINs
和WHERE
组合。这就是我现在被困住的地方。
答案
这不是一个真正的答案,但格式化对于可读性很重要。
你的SQL看起来有很多问题。
语法应如下所示(假设查询csv就像你在想的那样):
SELECT SUB1.Field1,
SUB1.AggField AS Agg1,
SUB2.AggField AS Agg2
FROM (SELECT Field1,
MAX(Field2) Agg_Field
FROM Table1 T1
GROUP
BY Field1
) SUB1
LEFT
JOIN (SELECT Field1,
MAX(Field2) Agg_Field
FROM Table1 T2
GROUP
BY Field1
) SUB2
ON SUB1.Field1 = SUB2.Field1
WHERE SUB1.AggField <> SUB2.AggField;
此外,你在这里缺少一个逗号:F1。[c5] F1。[c6]在第一个块中。
尝试修复这样的SQL语法,看看它能带给你什么。
以上是关于在两个表上分组并在结果VBA ADODB SQL查询上执行左连接的主要内容,如果未能解决你的问题,请参考以下文章
VBA - ADODB.Connection - 使用参数和检索受影响的记录数
使用 VBA 在 Excel 中的 SQL 表上使用参数化查询