如果字段满足条件,则让 ROW_NUMBER 重复

Getting ROW_NUMBER to repeat if field meets a condition

如果满足条件,我需要ROW_NUMBER将数据分配给特定用户。

ROW_NUMBER 将正常递增,直到找到重复值。当找到重复值时,我需要它使用相同的 ROW_NUMBER 直到找到新值。

例如...

使用时

SELECT ROW_NUMBER() OVER (ORDER BY COMPANY) AS rownum
      ,Company
      ,Contact
  FROM TABLE

我们显然可以预料到这个结果

rownum     Company              Contact
     1     BOB'S BURGERS        BOB
     2     STEVE'S SARDINES     STEVE
     3     STEVE'S SARDINES     JERRY
     4     STEVE'S SARDINES     MARY
     5     LARRY's LOBSTER      LARRY
     6     CHRIS' COWS          CHRIS

我想得到的是这个。每当公司名称 没有 更改时,重复 ROW_NUMBER 并在公司更改时继续增加数字

rownum     Company              Contact
     1     BOB'S BURGERS        BOB
     2     STEVE'S SARDINES     STEVE
     2     STEVE'S SARDINES     JERRY
     2     STEVE'S SARDINES     MARY
     3     LARRY'S LOBSTER      LARRY
     4     CHRIS' COWS          CHRIS

我正在使用此条件来查看公司是否与以前的公司名称匹配。它 returns 如果条件为真则为 2

ROW_NUMBER() OVER (PARTITION BY COMPANY ORDER BY COMPANY) AS SameCompany

你想要 DENSE_RANK 而不是 ROW_NUMBER。试试这个:

SELECT DENSE_RANK() OVER (ORDER BY COMPANY) AS rownum
      ,Company
      ,Contact
  FROM TABLE