选择以下给出的说明

时间:2015-07-09 15:52:59

标签: sql sql-server-2008 sql-server-2012

有一张像

这样的表格

id |客户|系

1986 |鲍勃| HR 1986年|鲍勃|管理员
2000年|史蒂夫| HR 2001 |鲍勃| CRT 2001 |鲍勃|管理员
2005年|坟墓|开发 2005年|坟墓|开发

并希望输出

id |客户|部门| Seq |代码

1986 |鲍勃|人力资源| 0 |短发 1986年|鲍勃|管理员| 0 | 2000年|史蒂夫|人力资源| 0 |史蒂夫 2001 |鲍勃| Crt | 1 |鲍勃 - 01 2001 |鲍勃|管理员| 1 | 2005年|坟墓|开发| 0 |开发 2005年|坟墓|开发| 0 |

Seq是: - 如果我们有id和客户相同,那么Seq应该是0,如果id将会改变,那么seq将增加一个

代码是name和seq的组合,但第二次如果name和id相同则代码应为空白

有可能吗?有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

代码似乎是每个ID显示名称的“第一”时间。序列似乎是枚举每个名称的ID。

select id, Customer, Dept, seq,
       (case when seqnum = 1 then name + '-' + right('0' + cast(seq as varchar(255)), 2)
        end) as code
from (select t.*,
       (rank() over (partition by name order by id) - 1) as seq,
             row_number() over (partition by name, id order by id) as seqnum
      from table t
     ) t;

请注意,您确实可以指定行的顺序,因此代码可以位于给定ID的任何特定行上。