【发布时间】:2021-02-03 21:21:02
【问题描述】:
表名:记录
| ID | Date | Time | Status | BoxType | Material | Rack | EmployeeNr | Transaction |
|---|---|---|---|---|---|---|---|---|
| 1 | 25-05-2020 | 13:11:12 | 70 | 36757 | 4 | 4 | 188 | 2 |
| 2 | 25-05-2020 | 13:12:40 | 71 | 31178 | 2 | 5 | 188 | 2 |
| 3 | 25-05-2020 | 13:13:31 | 71 | 31178 | 2 | 5 | 188 | 102 |
| 4 | 27-05-2020 | 13:14:14 | 71 | 38444 | 3 | 2 | 181 | 3 |
| 5 | 27-05-2020 | 13:14:15 | 71 | 38444 | 3 | 2 | 181 | 3 |
| 6 | 27-05-2020 | 13:14:41 | 71 | 38444 | 3 | 2 | 181 | 3 |
| 7 | 27-05-2020 | 13:15:10 | 71 | 39123 | 6 | 5 | 188 | 3 |
| 8 | 27-05-2020 | 13:15:51 | 71 | 38444 | 3 | 2 | 181 | 103 |
| 9 | 27-05-2020 | 13:16:51 | 71 | 38444 | 3 | 2 | 181 | 103 |
我想要的所需输出是第 1、6 和 7 行
| ID | Date | Time | Status | BoxType | Material | Rack | EmployeeNr | Transaction |
|---|---|---|---|---|---|---|---|---|
| 1 | 25-05-2020 | 13:11:12 | 70 | 36757 | 4 | 4 | 188 | 2 |
| 6 | 27-05-2020 | 13:14:41 | 71 | 38444 | 3 | 2 | 181 | 3 |
| 7 | 27-05-2020 | 13:15:10 | 71 | 39123 | 6 | 5 | 188 | 3 |
亲爱的开发者朋友们好,
我有这张表“记录”。有两种类型的交易,即。 “正向”和“反向”。正向交易由一位到两位数字表示(从 1 到 30),反向交易由三位数字表示(从 100 到 130) .现在,每一个独特的正向交易都有一个独特的反向交易。 (例如,交易 1 将有 101,交易 2 将有 102,交易 3 将有 103,依此类推。
我不想在我的报告中看到反向交易以及它们的正向交易。 (例如 102 和 2、103 和 3)但是,我必须找到匹配的转发交易,其其他列数据(Date、Status、BoxType、Material、Rack、EmployeeNr em>) 与反向交易相同。 (如图所示,记录号 2 和 3)另外,反向交易可以有多个正向交易匹配,我只想跳过那些数量等于 number 的正向交易的反向交易。 (*从表中可以看出,4,5和6号记录匹配到8号和9号记录,所以我想用8和9隐藏4号和5号两条记录)
所以,我尝试编写一个 SQL 查询,但它在 MS 访问中不起作用。感谢您的大力帮助!谢谢!最好的问候。
我的代码
with table_a as (
select a.*, row_number() over (partitition by Status, BoxType, Material, Rack, EmployeeNr , Transaction) as dup_n --all columns except ID and time.
---for multiple entries of same type
from Records a
where Transaction<100
)
,table_b as (
select b.*, (Transaction-100) as type_new,
row_number() over (partitition by Status, BoxType, Material, Rack, EmployeeNr , Transaction) as dup_n --all columns except time and ID
---for multiple entries of same type
from Records b
where Transaction>99
)
select*from(
select a.* from table_a
left join table_b
on <Status, BoxType, Material, Rack, EmployeeNr , Transaction> --all columns except time and ID
and a.type = b.type_new
and a.dup_n = b.dup_n
)
where a.Transaction is null
【问题讨论】:
-
那么从显示的样本集中,究竟应该检索哪些记录?编辑问题以将示例数据显示为文本表,而不是图像,与所需的输出相同。
-
@June7 您好 June7,我创建了一个文本表。我希望你现在明白了。非常感谢!
-
返回 1 和 7 相当简单,之后我就迷路了。我认为每组前 N 个,但 N 在查询对象中不能是动态的。我可能会构建一个 VBA 过程并将记录写入临时表。
-
@June7 以及如何使用 Access VBA 实现这一目标?