SQL 查找对应的负面和正面记录

SQL Find Corresponding Negative and Positive Records

我们在 SQL 服务器中实现了一个会计数据库。实际会计记录在 records table 中,具有以下架构(更改名称以保护无辜者 + 删除不相关的列)。

`recordId` INT PRIMARY KEY
`amount` MONEY
`dateRecorded` DATE
`campaignYear` INT
`storeId` INT FOREIGN KEY (to the stores table)
`productId` INT FOREIGN KEY (to the products table)

添加了一些不良记录。业务规则阻止我们简单地删除记录,因此必须用相同数量的负记录将它们清零(即,4,521 美元的记录被 -4,521 美元的记录清零)。

问题是一些负面记录与不正确的产品 ID 相关联。

我需要一个查询来显示在同一活动年内与不同产品 ID 相关联的所有记录,金额相反。

结果集看起来像这样:

recordId   | amount   | dateRecorded | campaignYear | storeId | productId
11545      | 1132.13  | '2015-05-14' | 2015         | 45      | 1729
90463      | -1132.13 | '2015-08-02' | 2015         | 45      | 2402
25487      | 9300.00  | '2011-01-13' | 2010         | 122     | 85060
67953      | -9300.00 | '2014-06-06' | 2010         | 122     | 11348
01045      | 5045.99  | '2001-11-29' | 2001         | 3       | 105
32468      | -5045.99 | '2016-08-01' | 2001         | 3       | 109

注意每对 positive/negative 记录的商店 ID 相同但产品 ID 不同。

我真的不知道该怎么做。

提前致谢!

使用 exists.

select * from tablename t
where exists (select 1 from tablename t1
              where t.amount = -1*t1.amount 
              and t.productid <> t1.productid 
              and t.campaignyear = t1.campaignyear
              and t.storeid = t1.storeid)

使用 self-join.

select t.* 
from tablename t
JOIN tablename t1 ON t.productid <> t1.productid 
and t.campaignyear = t1.campaignyear
and t.storeid = t1.storeid
WHERE t.amount = -t1.amount
ORDER BY t.storeid, abs(t.amount)