【问题标题】:assign new value for each unique value in other column为其他列中的每个唯一值分配新值
【发布时间】:2019-01-03 03:52:02
【问题描述】:

输入表

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

【问题讨论】:

  • 你期望结果的逻辑是什么?
  • thnx 用于编辑...无法使用 Ctrl +K 使用 phn..请告诉是否也可以使用 phn...
  • 对于每个下一个 TARGET ..logic 应该分配一个新值 ..它应该是按顺序排列的..
  • 您使用的是哪种兼容模式?

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


【解决方案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;

但是,累积和也是一种不错的方法。

【讨论】:

    【解决方案2】:
    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

    【讨论】:

    • 它给出一个错误...'order'附近的语法不正确
    • sql 版本?标签 sql-server-2012
    猜你喜欢
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    相关资源
    最近更新 更多