有一张像
这样的表格 1986 |鲍勃| HR
1986年|鲍勃|管理员
2000年|史蒂夫| HR
2001 |鲍勃| CRT
2001 |鲍勃|管理员
2005年|坟墓|开发
2005年|坟墓|开发
并希望输出
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相同则代码应为空白
有可能吗?有人可以帮助我吗?
答案 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的任何特定行上。