代码之家  ›  专栏  ›  技术社区  ›  techV

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

  •  1
  • techV  · 技术社区  · 6 年前

    输入表

    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 回复  |  直到 6 年前
        1
  •  1
  •   Yogesh Sharma    6 年前

    你也可以使用 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;
    

    然而,累加和也是一种很好的方法。

        2
  •  4
  •   Stanislav Kundii    6 年前
    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