为其他列中的每个唯一值分配新值

时间:2018-07-26 08:06:22

标签: sql sql-server sql-server-2008 sql-server-2012 group-by

输入表

ID.  Col1.   
1.    TARGET.   
2.    A
3.    A
4.    TARGET.
5.    A
6.    A
7.    TARGET

所需的输出:

ID.  Col1.       Col2
1.   TARGET.     1
2.   A.          1
3.   A.          1
4.   TARGET.     2
5.   A.          2
6.   A.          2
7.   TARGET.     3

2 个答案:

答案 0 :(得分:4)

SELECT *, SUM(CASE WHEN Col1 = 'Target' THEN 1 ELSE 0 END ) OVER (ORDER BY Id) FROM @a

SUM(..) OVER (ORDER BY .. ) 等于 SUM(...) OVER (ORDER BY .. ROWS UNBOUNDED PRECEDING AND CURRENT ROW)

OVER Clause

答案 1 :(得分:1)

您也可以使用apply

select t.*, t1.Col2
from table t outer apply
     ( select count(*) as Col2
       from table t1
       where t1.id <= t.id and t1.col1 = 'TARGET.'
     ) t1;

但是,累计和也是一种很好的方法。