问题:一个select 语句,为按某列排序的数据增加一个标志列,要求如下:
原表数据(按b升序):
a b
------ ----------
qwe 1
dsfg 2
小计1 18
ger 19
kuyre 20
we34 23
小计2 25
db 26
tyuq 29
小计3 35
添加标志列 C 后(注意a列中的 小计 及其对应B列的值):
a b c
-------------------------
qwe 1 18
dsfg 2 18
小计1 18 18
ger 19 25
kuyre 20 25
we34 23 25
小计2 25 25
db 26 35
tyuq 29 35
小计3 35 35
--创建表
create table dbo.one
(
id int identity(1,1),
a nvarchar(10),
b int
)
--插入数据
insert into one
select 'qwe', 1 union all
select 'dsfg ', 2 union all
select N'小计1', 18 union all
select 'ger', 19 union all
select 'kuyre', 20 union all
select 'we34', 23 union all
select N'小计2', 25 union all
select 'db', 26 union all
select 'tyuq', 29 union all
select N'小计3', 35
--方法1
select a,b,min(c) as c
from (
select one.a,one.b,(case when one.b<=tem.b then tem.c end) as c from one,
(select a,b,(case when a like N'小计%' then b end) as c from one)tem
)bb
where c is not null
group by a,b
--方法2
select C.*,(select top 1 b from one A where A.a like '小计%' and A.b-C.b>=0 ) C from one C order by C.b
--删除测试表
drop table one