我想基于某些列创建序列号。在下面的示例中,我希望对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()
,但我不确定这些是否有用,或者我将如何实现这些功能。
是否有可能获得预期的结果?
答案 0 :(得分:2)
row_number()是要使用的正确窗口函数。
'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