【问题标题】:MS SQL 2008 R2 : Manual increment column based on count of another column (like depth)MS SQL 2008 R2:根据另一列的计数手动增加列(如深度)
【发布时间】:2014-05-28 09:50:43
【问题描述】:

大家好, 这是我的表(MyTable)结构: Col1       Col2      Col3       Col4 a                                                                             a                                 f a            c              g b            d             h b                           我 b                                                                                                                                                                                              b                                                                                                                                                                             k (Col 1、2 和 3 是唯一标识符,Col4 是一个整数) 我需要增加(或减少)Col4 基于在 Col2 中为每个 Col3 值分组的相同值: Col1       Col2       Col3       Col4 a                                                                         1 a             c            f             2 a             c             g             3 b             d            h             1 b             d            i              2 b              d            j              3 b             d             k             4 有人有想法吗? 最好的祝福, 卡尔。

【问题讨论】:

  • 您要选择或更新表格吗?

标签: sql-server-2008


【解决方案1】:

你可以使用ROW_NUMBER():

选择

SELECT Col1,Col2,Col3,
       ROW_NUMBER() OVER(PARTITION BY Col1 ORDER BY Col3) as Col4
FROM TableName

更新表格:

UPDATE T1
SET Col4 = T2.RN
FROM
    TableName T1 JOIN
    (SELECT Col1,Col2,Col3,
           ROW_NUMBER() OVER(PARTITION BY Col1 ORDER BY Col3) as RN
     FROM TableName) T2 ON T1.Col1=T2.Col1 AND T1.Col2=T2.Col2 AND T1.Col3=T2.Col3

【讨论】:

    【解决方案2】:

    使用“更新”来更改数据,使用“案例何时”来选择您的案例。

    Example:
    update MyTable (Col4) values (case when Col3='e' then Col4+1 else Col4) 
    // increments Col4 if Col3 is 'e' and leaves it as it is if not 'e'
    

    【讨论】:

      猜你喜欢
      • 2013-05-18
      • 2023-03-27
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      相关资源
      最近更新 更多