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