现在有 一个表    id  pid  username  data   sessionid假设 id 为自增的。  pid 是存上一级的id   username是某一个标示    data 是数据。  有这样两条数据
                 id  pid  username  data   sessionid                 1    0     u1     111       空
               2    1     u1     333      不是空
                 3    1     u1     444      不是空
如果  有一条记录  sessionid 不等于空  pid = 另一条记录的id ,  username 相等 并且另外一条记录的 sessionid 等于空,
那么把 这一条数据全部复制到另外一条记录上,并且把另外这一条数据的 sessionid 设置为空,然后把这一条记录删除。 如果同时存在几条这样的数据。 复制id最大的那个条记录
最后的结果为
                  id  pid  username  data   sessionid                 1    0     u1     444      空不知道有没有描述清楚。   最好一条sql 语句搞定。 data 代表很多字段的。 一个一个写很麻烦, 实在不行  也没关系。

解决方案 »

  1.   

    create table tb(id int,pid int,username varchar(10),data int,sessionid nvarchar(10))
    insert into tb select 1,0,'u1',111,'空' 
    insert into tb select 2,1,'u1',333,'不是空' 
    insert into tb select 3,1,'u1',444,'不是空'
    select a.id,a.pid,a.username,b.data,a.sessionid from tb a inner join tb b on a.username=b.username
      where b.sessionid<>'空' and a.id=b.pid and a.sessionid='空'
       and b.id =(select max(id) from tb where pid=a.id)
    go
    drop table tb
    --如果楼主所说的"空"是指NULL或空串的话,把相应位置上比较的值进行修改,如要比较NULL,则用 is null.
    /*
    id          pid         username   data        sessionid
    ----------- ----------- ---------- ----------- ----------
    1           0           u1         444         空
    */