有个表Test
ID  Name  PID  PName
1   a     null null
2   b     null null
3   c     null null
4   d     1    a
5   e     1    a
6   f     3    c
现在我要不PID为1的记录的PID 和 PName 换成ID为2的ID 和 Name 即得到
ID  Name  PID  PName
1   a     null null
2   b     null null
3   c     null null
4   d     2    b
5   e     2    b
6   f     3    c

解决方案 »

  1.   


    select id ,name ,case pid when 1 then 2 else pid end,
    case pid when  1 then (select name from test where id =2) else pname endfrom test
      

  2.   

    Update Test A Set A.pid=B.id,A.pname=B.name from (Select id,name from test where id=2) B Where A.pid=1
      

  3.   

    Update Test A Set A.pid=B.id,A.pname=B.name from 
    (Select id,name from test where id=2) B Where A.pid=1
      

  4.   


    update [Test] set PID=(select top 1 ID from Test where ID=2),PName=(select top 1 Name from Test where ID=2) where PID=1
      

  5.   

    update就更容易了,他们都写了,
    我就不写了。
      

  6.   

    还是写写吧,毕竟和他们有些不同。
    update A set pid=2 ,pName = B.pName 
    from test a inner join test b 
    on b.id = a.pid
    where a.pid = 1 
      

  7.   

    我本来也想怎么写,但Update Test A这里不能用别名
    所以后面Where A.pid=1的条件要用Where Test.pid=1才行,
    但这是例子只有一个条件,而我实际中有很多个条件 每个条件都要加Test. 感觉很不爽 要怎么解决
      

  8.   

    declare @tabletest Table([ID] varchar,[Name] varchar(50) ,PID varchar ,[PName] varchar(50)) insert  @tabletest values('1','a','','')
    insert  @tabletest values('2','b','','')
    insert  @tabletest values('3','c','','')
    insert  @tabletest values('4','d','1','a')
    insert  @tabletest values('5','e','1','a')
    insert  @tabletest values('6','f','3','c')update @tabletest  set PID= '2' ,[Name]=(select [Name] from @tabletest where [id]='2')
    where PID ='1'
    select * from @tabletest
      

  9.   

    实际当中不只是一个name字段,还有其他字段
      

  10.   

    update @tabletest  set PID=B.[tempID] ,[PName]=B.[tempName]
    from(select [ID] as tempID, [Name] as tempName  from @tabletest where [id]='2')B
    where PID ='1' 那里面取出来的字段全部用别名就行了
      

  11.   

    update A set pid=2 ,pName = B.pName ,多个字段就往这里加cName = B.cName,dName = B.dName.............from test a inner join test b 
    on b.id = a.pid 
    where a.pid = 1