T1
姓名   说明
张一    
张二
张三    领导
张四需要结果
编号   姓名   说明
02     张一    
03     张二
01     张三    领导
04     张四
.................
意思就是把说明里是领导二字的用户编号定义为01,其他的用户编号依次增加1位.难度是领导这个值位置不确定,可能在最后一条记录,也可能是中间一条.当然,一张表中可以确定只有一个领导值存在的

解决方案 »

  1.   

    --sql 2005create table T1(姓名 nvarchar(10) , 说明 nvarchar(10))
    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 行受影响)
    */
      

  2.   

    create table T1(姓名 varchar(10), 说明 varchar(10))
    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   张四         
    */
      

  3.   

    ---------------------------------
    --  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 行受影响)
    */
      

  4.   

    --sql 2000create table T1(姓名 varchar(10) , 说明 varchar(10))
    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 行)
    */
      

  5.   


    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
      

  6.   

    如何直接使用UPDATE语句?用SELECT是读取,我需要的是直接更新,谢谢
      

  7.   


    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 行)
    */
      

  8.   

    修正一下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.编号 and 说明<>'领导')),2) 
                end
               )
    from T1 tselect * from [T1]
    --测试结果:
    /*
    编号   姓名   说明   
    ---- ---- ---- 
    02   张一   
    03   张二   
    01   张三   领导
    04   张四   (所影响的行数为 4 行)
    */
      

  9.   

    把上面的语句做为子查询,然后连接原来的表UPDATE即可.
      

  10.   

    declare @i int
    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