none
TSQL问题 RRS feed

  • 问题

  •       name      taici 
      a       1
            b       2
            c       3
            d       4
            e       5

    若   更改 taici 中的    5   改成 2  则 结果 为
          name         taici
           a           1
           e           2
           b           3
           c           4
           d           5

    小弟 在此 谢过

    2012年8月8日 6:42

答案

  • --不好意思,刚才写麻烦了
    --> 测试数据: @T
    declare @T table (name varchar(1),taici int)
    insert into @T
    select 'a',1 union all
    select 'b',2 union all
    select 'c',3 union all
    select 'd',4 union all
    select 'e',5
    
    update @T set taici=
    case when taici=5 then 2 when taici<2 then taici
    when taici>=2 then taici+1 when taici=2 then 5 end
    
    select * from @T order by taici
    /*
    name taici
    ---- -----------
    a    1
    e    2
    b    3
    c    4
    d    5
    */

    • 已标记为答案 anhaisheng 2012年8月8日 15:06
    2012年8月8日 11:26
    版主

全部回复

  • 是我表达的不清楚吗?
    2012年8月8日 8:19
  • update tb set  aici = 2 where aici  = 5
    2012年8月8日 9:00
  • --> 测试数据: @T
    declare @T table (name varchar(1),taici int)
    insert into @T
    select 'a',1 union all
    select 'b',2 union all
    select 'c',3 union all
    select 'd',4 union all
    select 'e',5
    
    --要改变的序号
    declare @i int set @i=5
    --改变后的序号
    declare @j int set @j=2
    --把5改成2,其他的顺延
    ;with maco as
    (
    	select 
    		name,
    		case when taici=@i then @j else taici end as c1,
    		case when taici=@i then 2 else 1 end as c2
    	from @T
    )
    ,t as
    (
    select *,row_number() over (order by c1,c2 desc) as taici from maco
    )
    --更新数据
    update @T
    set taici=b.taici
    from @T a left join t b on a.name=b.name
    
    select * from @T order by taici
    /*
    name taici
    ---- -----------
    a    1
    e    2
    b    3
    c    4
    d    5
    */
    

    2012年8月8日 11:21
    版主
  • --不好意思,刚才写麻烦了
    --> 测试数据: @T
    declare @T table (name varchar(1),taici int)
    insert into @T
    select 'a',1 union all
    select 'b',2 union all
    select 'c',3 union all
    select 'd',4 union all
    select 'e',5
    
    update @T set taici=
    case when taici=5 then 2 when taici<2 then taici
    when taici>=2 then taici+1 when taici=2 then 5 end
    
    select * from @T order by taici
    /*
    name taici
    ---- -----------
    a    1
    e    2
    b    3
    c    4
    d    5
    */

    • 已标记为答案 anhaisheng 2012年8月8日 15:06
    2012年8月8日 11:26
    版主
  • 做一下跟屁虫,我觉得注意一下格式比较好

    update @T set taici=
    case when taici=5 then 2 
    when taici<2 then taici
    when taici>=2 then taici+1 
    when taici=2 then 5 end


    给我写信: QQ我:点击这里给我发消息

    2012年8月8日 14:53
  • 高手。。可否可以  多选 更改?可否更行多选更改?  小弟再次谢过。
    2012年8月9日 1:02
  •     name     taici    复选框
            a         1        
            b         2
            c         3
            d         4
            e         5

    你的意思是不是后面有一个复选框,选中哪一个哪一个就更改位置?


    给我写信: QQ我:点击这里给我发消息

    2012年8月9日 6:09
  • 是不是还有一个下拉列表,下来列表显示taici所有的值让用户选择?将taici相应的列改为其他的值

     name     taici    复选框    下拉列表
            a         1    更改         
            b         2    不更改
            c         3     更改
            d         4     不更改
            e         5     不更改


    给我写信: QQ我:点击这里给我发消息

    2012年8月9日 6:11
  • 例1  如果  选择   a 好B  更改   到  3   结果就成

    name      taici

    c           1

    d            2

    a           3

    b           4

    e            5

    例 2 如果  选择  a和c  更改 3

    name         taici

     b             1

    d              2

    a              3

    c            4

    e           5

    我这么说明白吗?

    2012年8月9日 7:16
  • 不明白    

    给我写信: QQ我:点击这里给我发消息

    2012年8月9日 9:36