sql - 删除反转对 - ms 访问 SQL
问题描述
我的问题与Remove reversal pairs using SQL类似,但不同。情况如下。数据(没有错别字。两行与 X1 相关,并且反转确实具有相同的 REF):
ROW | REF | Amount | Comment |
1 | 00001 | 1000 | Relates to X1 |
2 | 00002 | 500 | Relates to X1 |
3 | 00003 | 100 | Relates to X2 |
4 | 00004 | 1000 | Relates to X3 |
5 | 00004 | -1000 | Reverses 00004 |
6 | 00005 | 250 | Relates to X3 |
期望的结果
ROW | Agg_Amt | Comment |
1 | 1500 | X1 |
2 | 100 | X2 |
3 | 250 | X3 |
问题:
以下成功删除了反转但丢失了重要信息
SELECT REF, SUM(Amount) FROM T1 GROUP BY REF
以下为 X3 生成 2 行,1 为 1250,1 为 -1000
SELECT REF, Comment, SUM(Amount) FROM T1 GROUP BY REF, Comment
我尝试的任何其他解决方案都会导致上述两个问题之一,因此分享毫无意义。
我已经使用 解决了这个问题WHERE REF NOT IN
,但至少可以说性能是次优的。
编辑
完整代码:
SELECT Comment, SUM(Amount)
FROM T1
WHERE REF NOT IN(
SELECT DISTINCT REF
FROM T1
WHERE Comment Like "Reverses*")
GROUP BY Comment
作为 MS-Access,我不能使用临时表。
问题
有没有一个优雅的解决方案,最好没有太多的包装和嵌套?我知道我可能在这里遗漏了一些简单的东西。
谢谢!
解决方案
如果我理解正确,这可能会做你想要的:
select t1.comment, sum(amount)
from t1
where not exists (select 1
from t1 as tt1
where tt1.ref = t1.ref and
tt1.amount = - t1.amount and
(t1.comment like "Reverses*" or
tt1.comment like "Reverses*"
)
)
group by t1.comment;
推荐阅读
- angular - 键入时禁用 matSelect 上的默认搜索
- python-docx - python-docx 获取 docx 信息
- android - 当我添加查看要形成的edittext时如何获取每个edittext值?
- c# - 如何将EditText用户输入存储到c#中的字符串变量中
- mysql - MySQL:创建模式的内存副本
- c++ - openssl 内存泄漏:我还是错误?
- sql - IIf 函数中是否需要这两个条件?
- android - 解决 Android Studio 中的资源链接错误
- testing - TestCafe:使用来自客户端的数据生成测试?
- d3.js - 如何避免 d3.zoom 在第一次缩放或平移时翻译?