在 Access 2013 中加入查询
Join query in Access 2013
目前有一个 table 正在访问大量数据,由于数据量太大,我无法再在 Excel 中轻松使用它。
我正在部分地进行查询以从中提取数据 table。
- 7 列 table
- 一列
GL_GL_NUM
包含交易编号。 ~ 这些数字中有 75% 是成对的。我正在尝试为该列中的每个唯一交易号提取记录(所有列信息)。
我从谷歌搜索中整理了一些代码,这些代码假设应该可以工作,但我认为我在语法上遗漏了一些东西,或者只是要求访问权限来做它不能做的事情。
见下文:
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 来展示我的结果并使这一点更清楚。
您想要详细结果(所有行和列)还是聚合结果,每个交易号一行?
如果您想要一个聚合结果,例如不同交易数量的计数,那么您需要将一个或多个聚合函数应用于您包含的任何其他列。
如果你运行
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 行,你需要对你想要返回的每一列执行某种聚合函数。
目前有一个 table 正在访问大量数据,由于数据量太大,我无法再在 Excel 中轻松使用它。
我正在部分地进行查询以从中提取数据 table。
- 7 列 table
- 一列
GL_GL_NUM
包含交易编号。 ~ 这些数字中有 75% 是成对的。我正在尝试为该列中的每个唯一交易号提取记录(所有列信息)。
我从谷歌搜索中整理了一些代码,这些代码假设应该可以工作,但我认为我在语法上遗漏了一些东西,或者只是要求访问权限来做它不能做的事情。
见下文:
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 来展示我的结果并使这一点更清楚。
您想要详细结果(所有行和列)还是聚合结果,每个交易号一行?
如果您想要一个聚合结果,例如不同交易数量的计数,那么您需要将一个或多个聚合函数应用于您包含的任何其他列。
如果你运行
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 行,你需要对你想要返回的每一列执行某种聚合函数。