代码之家  ›  专栏  ›  技术社区  ›  Westerlund.io

基于分组值创建序列号

  •  0
  • Westerlund.io  · 技术社区  · 8 年前

    我想根据一些列创建一个序列号。在下面的例子中,我想分组讨论 Column1 Column2 在不丢失数据的情况下 Column3 .

    Column1     Column2         Column3
    A           SharedData      Data1
    A           SharedData      Data2
    A           SharedData      Data3
    B           SharedData      Data1
    B           SharedData      Data2
    B           SharedData      Data3
    

    预期结果

    Seq     Column1     Column2         Column3
    1       A           SharedData      Data1
    2       A           SharedData      Data2
    3       A           SharedData      Data3
    1       B           SharedData      Data1
    2       B           SharedData      Data2
    3       B           SharedData      Data3
    

    我试着读了一遍 ROW_NUMBER() , DENSE_RANK() RANK() 但我不确定这些措施是否有效,或者在我的案例中如何实施这些措施。

    有可能得到预期的结果吗?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Jeff Breadner    8 年前

    row_number()是要使用的正确窗口函数。

    “partition by”使您可以为partition by specification中的每个不同值获得不同的数字序列(这里可以指定多个列),并且该序列按“order by”规范排序(同样,它可以是多个列;每个列可以按asc或desc排序,与正常的“order by”语法相同)。

    SQL Server 2008中引入了此窗口功能。

    select
      row_number() over (partition by Column1 order by Column3) as Seq,
      Column1,
      Column2,
      Column3
    from
      mytable