序号
|
|
|
1
|
山姆
|
|
|
山姆
|
|
三
|
山姆
|
诺顿霍尔德
|
4
|
山姆
|
搁置
|
5
|
|
搁置
|
|
艾伦
|
|
|
艾伦
|
搁置
|
8
|
|
诺顿霍尔德
|
9
|
|
诺顿霍尔德
|
10
|
|
|
序号
|
名称
|
|
等级
|
1
|
|
搁置
|
1
|
2
|
山姆
|
|
2
|
三
|
山姆
|
|
|
4
|
|
搁置
|
三
|
5
|
|
搁置
|
1
|
|
艾伦
|
诺顿霍尔德
|
|
|
艾伦
|
搁置
|
|
8
|
|
诺顿霍尔德
|
无效的
|
9
|
伊利斯
|
诺顿霍尔德
|
|
10
|
伊利斯
|
诺顿霍尔德
|
无效的
|
我可以通过做以下事情来达到预期的结果
declare @t1 TABLE (SN int, name varchar(10), status varchar(10))
INSERT INTO @t1
Select SN, name,status
from
(
VALUES
(1, 'Sam', 'OnHold'),
(2, 'Sam', 'OnHold'),
(3, 'Sam', 'NotOnHold'),
(4, 'Sam', 'OnHold'),
(5, 'Alan', 'OnHold'),
(6, 'Alan', 'NotOnHold'),
(7, 'Alan', 'OnHold'),
(8, 'Elis', 'NotOnHold'),
(9, 'Elis', 'NotOnHold'),
(10, 'Elis', 'NotOnhold')
) t (SN, name,status)
select * from
(select SN, name, status, ROW_NUMBER() OVER (PARTITION BY name ORDER BY SN) as rank from @t1 where status='OnHold'
union all
select SN, name, status, null as rank from @t1 where status<>'OnHold') a
ORDER BY SN
但是,有没有更好的优化方法,一次达到预期的结果,而不必使用联合所有。
我试过下面的方法,但没有给我想要的
select SN, name, status, CASE when status='OnHold' then ROW_NUMBER() OVER (PARTITION BY name ORDER BY SN) else NULL end as RANK from @t1 order by SN
先谢谢你。