在 Access 2013 中加入查询

Join query in Access 2013

目前有一个 table 正在访问大量数据,由于数据量太大,我无法再在 Excel 中轻松使用它。

我正在部分地进行查询以从中提取数据 table。

我从谷歌搜索中整理了一些代码,这些代码假设应该可以工作,但我认为我在语法上遗漏了一些东西,或者只是要求访问权限来做它不能做的事情。

见下文:

SELECT SOURCE_FUND, GLType, Contract, Status, Debit, Credit, GL_GL_NUM
FROM Suspense
JOIN (
SELECT TC_TXN_NUM TXN_NUM, COUNT(GL_GL_NUM) GL_NUM
FROM Suspense
GROUP BY TC_TXN_NUM HAVING COUNT(GL_GL_NUM) > 1 )  SUB ON GL_GL_NUM = GL_NUM

嘿贝丝,这是建议的代码吗?它说 FROM 子句中存在语法错误。谢谢

SELECT * 来自 SuspenseGL

加入(

SELECT TC_TXN_NUM, 计数(GL_GL_NUM) GL_NUM

从悬念

分组依据TC_TXN_NUM

计数(GL_GL_NUM) > 1

您可以执行以下操作:

SELECT S.* FROM
SUSPENSE AS S 
INNER JOIN (SELECT DISTINCT GL_GL_NUM, MIN(ID) AS ID FROM SUSPENSE
            GROUP BY GL_GL_NUM) AS S2
ON S.ID = S2.ID
AND S.GL_GL_NUM = S2.GL_GL_NUM

这将 return 一行用于唯一 gl_gl_num。但是,如果其他行有不同的数据,则不会显示。您将不得不使用 SUM(Credit)SUM(Debit)GROUP BY the gl_gl_num.

聚合该数据

我附上了 SQL Fiddle 来展示我的结果并使这一点更清楚。

http://sqlfiddle.com/#!3/8284f/2

您想要详细结果(所有行和列)还是聚合结果,每个交易号一行?

如果您想要一个聚合结果,例如不同交易数量的计数,那么您需要将一个或多个聚合函数应用于您包含的任何其他列。

如果你运行

SELECT TC_TXN_NUM, COUNT(GL_GL_NUM) GL_NUM
FROM Suspense
GROUP BY TC_TXN_NUM 
HAVING COUNT(GL_GL_NUM) > 1 

你会为每个不同的 txn 得到一行,但如果你随后将这些结果与你的原始 table 连接起来,你将拥有与没有连接它们相同的行数完全不同的 txns。

是否有您不希望包含在结果中的列?如果没有,那么您需要使用的唯一查询是

select * from suspense

考虑到您的列名,您可能需要的是:

SELECT SOURCE_FUND, GLType, Contract, Status, sum(Debit) as sum_debit, 
sum(Credit) as sum_credit, count(*) as txCount
    FROM Suspense
    group by
    SOURCE_FUND, GLType, Contract, Status

根据您的意见,如果您不能处理汇总结果,则需要处理所有结果:

Select * from suspense

什么不起作用? 75%的txns重复也没关系,每一行每一列都要发送出去。


好的,让我们说

Select * from suspense

returns 8 行,并且

select GL_GL_NUM from suspense group by GL_GL_NUM

returns 5 行,因为其中 3 行有重复 GL_GL_NUMs 而其中 2 行没有。

您希望结果集中有多少行?如果你想要返回少于 8 行,你需要对你想要返回的每一列执行某种聚合函数。