当一组行(不是全部)在表中重复时设置条件

时间:2018-10-26 20:28:47

标签: sql sql-server tsql

IF account_no>'10000000'和offset_account ='6XXX' 然后 如果表中的列---(security_no AND asofdate AND abs(qty))的值再次出现 则(1) 否则(0)。

sub_no account_no rep security_no symbol asofdate abs_qty new_column
177    12345      X   2000        A      20180101 100     1
177    23456      Y   2000        A      20180101 100     1
177    34567      Z   5000        A      20180101 300     0
177    45455      Z   5000        A      20170909 300     0

由于security_no,asofdate和abs_qty列与第2行的值完全相同,因此第一行的值应为1。

第二行应该具有值1,因为security_no,asofdate和abs_qty列下的值与第1行的值完全相同。

由于security_no,asofdate和abs_qty列下的值与表中的任何其他行都不相同,因此第三行的值应为0。

第四行应为0,因为security_no,asofdate和abs_qty列下的值与表中的任何其他行都不相同。

1 个答案:

答案 0 :(得分:1)

我认为您可以使用窗口功能来完成您想做的事情:

select t.*,
       (case when count(*) over (partition by security_no, asofdate, abs_qty) > 1
             then 1 else 0
        end) as new_column
from t;