Sql server 2008 基于包含共享数据的某些列创建标识符

Sql server 2008 基于包含共享数据的某些列创建标识符,sql-server-2008,tsql,Sql Server 2008,Tsql,在下面的示例中,列sequence应该是某些列中共享相同值的行的标识符-compania、hrEntr、hrSaida、durJornada、DURINTV、INIENTV、TERMINERV、sistema_horario、turno-但是它不应该将其中一列计算在内-dia 如图所示,前五行共享这些列,因此序列应为1。第6行不共享前面的所有值,它应该将自己的序列设置为2 我曾经使用过(ROW_NUMBER())OVER(PARTITION BY…),但它会产生相反的结果,即当匹配列停止时,它

在下面的示例中,
列sequence
应该是某些列中共享相同值的行的标识符-
compania、hrEntr、hrSaida、durJornada、DURINTV、INIENTV、TERMINERV、sistema_horario、turno
-但是它不应该将其中一列计算在内-
dia

如图所示,前五行共享这些列,因此
序列应为1。第6行不共享前面的所有值,它应该将自己的
序列设置为2

我曾经使用过(
ROW_NUMBER())OVER(PARTITION BY…
),但它会产生相反的结果,即当匹配列停止时,它会重新开始

有没有办法创建我想要的结果?

您可以使用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

为了帮助您,我们需要能够复制和粘贴您的表模式和数据从您的问题。这是不可能的图片。请花一点时间来阅读这两个链接,然后考虑编辑您的问题,如果你仍然在寻求帮助。而且,关于张贴图片,你的答案是正确的,但我相信。当时,我对自己的问题描述得很糟糕,所以我创建了一个新的线程:嗯,我想其他人已经给了你这个新问题的答案:-)