表名:TESTCOL1 COL2
A01  1234
A02  1234
A03  1234
B01  1234
B02  1234
B03  1234
B04  1234
说明:因为COL1列的前三行数据的值的第一位都相同,即都是 A 开头,并且这三行的COL2列的值都相同,都是1234,所以需要将第二行和第三行的COL2列的数据处理为“同上”;同样4-7行的数据也按此处理,处理结果为:
COL1 COL2
A01  第1:1234
A02  第2:同上
A03  第3:同上
B01  第1:1234
B02  第2:同上
B03  第3:同上
B04  第4:同上最好能用最简单,易于理解的办法处理,谢谢!!

解决方案 »

  1.   

    请不要使用UPDATE,最好用查询,然后临时表或存储过程也可
      

  2.   

    declare @test table
    (
    col1 varchar(3),
    col2 varchar(4)
    )
    insert into @test
    select 'A01','1234' union all
    select 'A02','1234' union all
    select 'A03','1234' union all
    select 'B01','1234' union all
    select 'B02','1234' union all
    select 'B03','1234' union all
    select 'B04','1234'
    select Col1,Col2='第'+cast(convert(int,right(col1,2))as varchar)+':'+case when col2=(select col2 from @test where cast(right(col1,2)as int)=cast(right(a.col1,2)as int)-1 and left(a.col1,1)=left(col1,1)) then '同上' else col2 end
    from @test a
    /*
    Col1 Col2                                  
    ---- ------------------------------------- 
    A01  第1:1234
    A02  第2:同上
    A03  第3:同上
    B01  第1:1234
    B02  第2:同上
    B03  第3:同上
    B04  第4:同上
    */
      

  3.   

    Create Table TEST
    (COL1 Char(3),
     COL2 Nvarchar(10))
    Insert TEST Select 'A01',  '1234'
    Union All Select'A02',  '1234'
    Union All Select'A03',  '1234'
    Union All Select'B01',  '1234'
    Union All Select'B02',  '1234'
    Union All Select'B03',  '1234'
    Union All Select'B04',  '1234'
    GO
    Select 
    COL1,
    (Case When Not Exists(Select 1 From TEST Where Left(COL1,1)=Left(A.COL1,1) And COL2<>A.COL2)
    Then Case When Not Exists(Select 1 From TEST Where Left(COL1,1)=Left(A.COL1,1) And COL1<A.COL1) Then COL2
    Else N'同上' End
    Else COL2 End) As COL2
    From TEST A
    GO
    Drop Table TEST
    GO
    /*
    COL1 COL2
    A01 1234
    A02 同上
    A03 同上
    B01 1234
    B02 同上
    B03 同上
    B04 同上
    */
      

  4.   

    create table a
    (
       COL1 varchar(3),
       COL2 Nvarchar(10)
    )
    go
    insert into a values ('A01',1234)
    insert into a values ('A02',1234)
    insert into a values ('A03',1234)
    insert into a values ('B01',1234)
    insert into a values ('B02',1234)
    insert into a values ('B03',1234)
    insert into a values ('B04',1234)
    select COL1,COL2=case
             when COL1 like'A__' and cast(convert(int,right(COL1,2))as varchar)=1 then '第'+cast(convert(int,right(COL1,2))as varchar)+':'+ COL2 
                                                                                                   
             when COL1 like'B__'and cast(convert(int,right(COL1,2))as varchar)=1 then '第'+cast(convert(int,right(COL1,2))as varchar)+':'+COL2 
              else 
                 '第'+cast(convert(int,right(COL1,2))as varchar)+'同上' 
             end
     from a
      

  5.   

    谢谢kaka009() A和B只是一个代号,实际上是一串数字组合,这里我为了方便把它简化了