基于某些列共享数据创建标识符(Create identifier based on some of

2019-10-28 11:58发布

在列下面的例子中sequence应该是,在某些列共享相同的值行的标识符- compania, hrEntr, hrSaida, durJornada, durInterv, iniInterv, termInterv, sistema_horario, turno -但是它不应该考虑到计算一个列- dia

因此,作为第一五行分享这些列中的图片说明,以便在sequence应为1排6,不共享所有以前的值都应该有它自己的sequence设置为2号。

我合作过ROW_NUMBER() OVER (PARTITION BY...但也就是在启动时匹配列停它产生相反的结果。

有没有一种方法来创建我想要的结果?

Answer 1:

你可以使用RANK()函数。 检查该解决您的需求:

drop table if exists stackoverflowTbl;
/********************************************************** DDL+DML */
create table stackoverflowTbl(id int identity (1,1), txt int)
GO
insert stackoverflowTbl (txt) values (1),(1),(2),(1),(3),(22),(22)
GO
select * from stackoverflowTbl
GO
/********************************************************** solution */
select id,txt,
    ROW_Number () OVER (order by txt) - RANK ( ) OVER ( partition by txt order by id ) as MySequence 
from stackoverflowTbl
GO


文章来源: Create identifier based on some of the columns with shared data