SQL 帮助 - 尝试标记用相反符号补充相同数字的值

SQL help - Trying to tag values which complement the same number with opposite sign

我正在尝试标记一列中的数字,该列中既有正数也有负数,如果相加则加起来为零。为此,我想根据 table 中的帐户列将一个 table 分成多个块。 我张贴了一张图片来进一步解释我的结果(标志列)是如何预期的。 我是新手,非常感谢我能得到的所有帮助。 谢谢大家

SQL help

使用lead(),lag()row_number()函数。如果当前记录为偶数,则与上一条记录进行比较,如果为奇数,则与下一条记录进行比较

SELECT Account,
       Amount,
       CASE 
        WHEN seq % 2 = 0 THEN (CASE WHEN amount = (-1) * prev THEN 1 ELSE 0 END)
        WHEN seq % 2 > 0 THEN (CASE WHEN amount = (-1) * next THEN 1 ELSE 0 END) END flag
FROM
(SELECT *,
      row_number() over(partition BY Account ORDER BY Account) AS seq,
      lag(Amount) over(partition BY Account ORDER BY Account) AS prev,
      lead(Amount) over(partition BY Account ORDER BY Account) AS next
FROM tb) t

演示在 db<>fiddle

由于重复,这相当棘手。这个想法是枚举每个帐户的值,然后为标志使用 window 函数:

select t.*,
       (case when count(*) over (partition by account, abs(amount), seqnum) = 2
             then 1 else 0 
        end) as flag
from (select t.*,
             row_number() over (partition by account, amount order by amount) as seqnum
      from t
     ) t;

这可能看起来有点神秘(“那个“2”是从哪里来的?”)。子查询通过添加序列号来枚举每个帐户的每个金额。

然后外层查询按序号统计金额的绝对值的个数。数字只能是1或2,如果是2,那么必须有正负值(因为row_number()防止同号的两个值有相同的序号)