Tsql 基于分组值创建序列号

Tsql 基于分组值创建序列号,tsql,Tsql,我想根据一些列创建一个序列号。在下面的示例中,我希望分组到Column1和Column2,而不会丢失Column3中的数据 Column1 Column2 Column3 A SharedData Data1 A SharedData Data2 A SharedData Data3 B SharedData Data1 B Shar

我想根据一些列创建一个序列号。在下面的示例中,我希望分组到
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()

“partition by”使得您可以为partition by规范中的每个不同值获得不同的数字序列(这里可以指定多个列),并且序列按照“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
row_number()是要使用的正确窗口函数

“partition by”使得您可以为partition by规范中的每个不同值获得不同的数字序列(这里可以指定多个列),并且序列按照“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