T1
姓名 说明
张一
张二
张三 领导
张四需要结果
编号 姓名 说明
02 张一
03 张二
01 张三 领导
04 张四
.................
意思就是把说明里是领导二字的用户编号定义为01,其他的用户编号依次增加1位.难度是领导这个值位置不确定,可能在最后一条记录,也可能是中间一条.当然,一张表中可以确定只有一个领导值存在的
姓名 说明
张一
张二
张三 领导
张四需要结果
编号 姓名 说明
02 张一
03 张二
01 张三 领导
04 张四
.................
意思就是把说明里是领导二字的用户编号定义为01,其他的用户编号依次增加1位.难度是领导这个值位置不确定,可能在最后一条记录,也可能是中间一条.当然,一张表中可以确定只有一个领导值存在的
insert into t1 values(N'张一','')
insert into t1 values(N'张二','')
insert into t1 values(N'张三',N'领导')
insert into t1 values(N'张四','')
goselect 编号 = right('0' + cast(row_number() over(order by 说明 desc, 姓名) as varchar),2) , * from t1drop table t1/*
编号 姓名 说明
---- ---------- ----------
01 张三 领导
02 张一
03 张二
04 张四 (4 行受影响)
*/
go
insert T1 select '张一', ''
insert T1 select '张二', ''
insert T1 select '张三', '领导'
insert T1 select '张四', ''
go
select id1=identity(int,1,1),* into #temp from T1 where 说明='领导'
go
insert #temp(姓名, 说明) select * from T1 where 说明<>'领导'
go
select 编号=(case 说明 when '领导' then '01' else right('00'+ltrim(id1),2) end),姓名, 说明 from #temp
go
drop table T1,#temp
/*
编号 姓名 说明
---- ---------- ----------
02 张一
01 张三 领导
03 张二
04 张四
*/
-- Author: liangCK 小梁
---------------------------------
--> 生成测试数据: @T1
DECLARE @T1 TABLE (姓名 VARCHAR(4),说明 VARCHAR(4))
INSERT INTO @T1
SELECT '张一',null UNION ALL
SELECT '张二',null UNION ALL
SELECT '张三','领导' UNION ALL
SELECT '张四',null--SQL查询如下:SELECT
编号=CASE
WHEN 说明='领导' THEN '01'
ELSE RIGHT('0'+RTRIM((SELECT COUNT(*)+1
FROM @T1
WHERE (说明<>'领导' OR ISNULL(NULLIF(说明,''),'')='')
AND 姓名<=A.姓名)),2)
END,
姓名,说明
FROM @T1 AS A/*
编号 姓名 说明
---- ---- ----
04 张一 NULL
02 张二 NULL
01 张三 领导
03 张四 NULL(4 行受影响)
*/
insert into t1 values('张一','')
insert into t1 values('张二','')
insert into t1 values('张三','领导')
insert into t1 values('张四','')
goselect * , 编号 = right('0'+cast((select count(1) from t1 where 说明 = '领导' and 姓名 < t.姓名) + 1 as varchar),2) from t1 t where 说明 = '领导'
union all
select * , 编号 = right('0'+cast((select count(1) from t1 where 说明 <> '领导' and 姓名 < t.姓名) + 1 + (select count(*) from t1 where 说明 = '领导') as varchar),2) from t1 t where 说明 <> '领导'drop table t1 /*
姓名 说明 编号
---------- ---------- ----
张三 领导 01
张一 04
张二 02
张四 03(所影响的行数为 4 行)
*/
create table t1
(
姓名 varchar(10),
说明 varchar(10)
)insert into t1
select '张一',null union
select '张二',null union
select '张三','领导' union
select '张四',null union
select '张五',null
select t1.* ,id=identity(int,1,1) into #a from t1
order by (case when 说明='领导' then 1 else 2 end),姓名select #a.姓名,#a.说明,right('00'+ltrim(id),2) from #a
---------------------------------------
张三 领导 01
张二 NULL 02
张四 NULL 03
张五 NULL 04
张一 NULL 05
if object_id('[T1]') is not null drop table [T1]
go
create table [T1]([编号] varchar(2),[姓名] varchar(4),[说明] varchar(4))
insert [T1]
select '01','张一','' union all
select '02','张二','' union all
select '03','张三','领导' union all
select '04','张四',''update t
set t.编号=(case
when t.说明='领导' then '01'
else right('00'+ltrim((select count(1)+2 from T1 where 姓名<t.姓名)),2)
end
)
from T1 tselect * from [T1]
--测试结果:
/*
编号 姓名 说明
---- ---- ----
05 张一
02 张二
01 张三 领导
04 张四 (所影响的行数为 4 行)
*/
go
create table [T1]([编号] varchar(2),[姓名] varchar(4),[说明] varchar(4))
insert [T1]
select '01','张一','' union all
select '02','张二','' union all
select '03','张三','领导' union all
select '04','张四',''update t
set t.编号=(case
when t.说明='领导' then '01'
else right('00'+ltrim((select count(1)+2 from T1 where 编号<t.编号 and 说明<>'领导')),2)
end
)
from T1 tselect * from [T1]
--测试结果:
/*
编号 姓名 说明
---- ---- ----
02 张一
03 张二
01 张三 领导
04 张四 (所影响的行数为 4 行)
*/
select @i= 1
update t1 set 编号 = case when 说明= '领导' then '01' else right('00'+rrtim(@i),2) end
,@i = @i+case when 说明= '领导' then 0 else 1 end