根据分组值创建序列号

时间:2018-05-17 22:55:01

标签: tsql

我想基于某些列创建序列号。在下面的示例中,我希望对Column1Column2进行分组,而不会丢失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 个答案:

答案 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