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

Sql 当一组行(不是全部)在表中重复自身时,设置一个条件,sql,sql-server,tsql,Sql,Sql Server,Tsql,如果科目号>10000000且抵销科目='6XXX' 然后 如果表中再次出现列--(security_no和asofdate以及abs(qty))的值 然后(1) 其他(0) 第一行的值应为1,因为security_no、asofdate和abs_qty列下的值与第2行的值完全相同 第二行的值应为1,因为security_no、asofdate和abs_qty列下的值与第1行的值完全相同 第三行的值应为0,因为security_no、asofdate和abs_qty列下的值与表中的任何其他行不同

如果科目号>10000000且抵销科目='6XXX' 然后 如果表中再次出现列--(security_no和asofdate以及abs(qty))的值 然后(1) 其他(0)

第一行的值应为1,因为security_no、asofdate和abs_qty列下的值与第2行的值完全相同

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

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


第四行的值应为0,因为security\u no、asofdate和abs\u qty列下的值与表中的任何其他行不同。

我认为可以使用窗口函数执行您想要的操作:

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

表中没有“第一行”或“第二行”。SQL表表示无序集。请指定用于定义排序的列或列组合。谢谢,Gordon。这个解决方案非常有效。
select t.*,
       (case when count(*) over (partition by security_no, asofdate, abs_qty) > 1
             then 1 else 0
        end) as new_column
from t;