【发布时间】:2018-04-08 05:23:28
【问题描述】:
下面的查询是一个粗略的草稿,其中包含我要编写的查询中的相关列,因此不要将其视为解决方案。将其用作表名和列名的指南。我正在尝试删除相同 ORDER_ID 和 ACCOUNT_ID 的任何相互抵消的交易。我认为我不能使用 SUM 进行聚合,因为这会将分组的所有 TX_AMOUNT 值加在一起。请参阅 TX_ID 6 和 7。它们都需要显示在结果集中。如何从下表中输出 TX_ID,并过滤掉任何不显示“SHOW THIS”的内容?
SELECT
T1.ACCOUNT_ID
T1.ORDER_ID,
T1.TX_ID
FROM TRANSACTION AS T1
WHERE
T1.ACCOUNT_ID IN (
SELECT T2.ACCOUNT_ID
FROM TRANSACTION AS T2
GROUP BY T2.ACCOUNT_ID, T2.ORDER_ID
HAVING SUM(T2.TX_AMOUNT) != 0 AND T2.ORDER_ID IS NOT NULL
)
AND T1.ORDER_ID IN (
SELECT T3.ORDER_ID
FROM TRANSACTION AS T3
GROUP BY T3.ACCOUNT_ID, T3.ORDER_ID
HAVING SUM(T3.TX_AMOUNT) != 0 AND T3.ORDER_ID IS NOT NULL
)
TX_ID ORDER_ID ACCOUNT_ID TX_AMOUNT
------------------------------------
1 A1 200 -3.00 <--------- DON'T SHOW THIS; OFFSET BY #2
2 A1 200 3.00 <--------- DON'T SHOW THIS; OFFSET BY #1
3 A1 200 3.00 <--------- SHOW THIS
4 A2 999 -10.01 <--------- DON'T SHOW THIS; OFFSET BY #5
5 A2 999 10.01 <--------- DON'T SHOW THIS; OFFSET BY #4
6 A2 999 10.01 <--------- SHOW THIS
7 A2 999 5.02 <--------- SHOW THIS
【问题讨论】:
-
我认为显示 TX_ID 2 或 3 无关紧要,只要为 tx_ID 1 删除 1 还是应该始终是更高的 tax_Id? (通过基于 FIFO 方法的网络结算,先入先出,不使用 TX_ID)我还以为你离开了凤凰基金会,和你的好朋友 Teal'c(他在 MacGyver episode 和你)
-
正确,显示#2 或#3 很好。并且显示#5 或#6 也很好。我留了太多的水,所以我不得不永远退休。
-
真;但不时调用它仍然很有趣。
-
感谢好思想实验(偏离我目前的兔子洞);我需要一个!
标签: sql sql-server filter sum offset