现在数据库中跟据姓名查出两条记录(呈现在页面上) ,但是可以肯定这两条记录是一个人。如下:
字段  name   sex   brithdate      arg    idcard     org  
    1 张三   男                          123456     设计院
    2 张三        1988-06-07      20     123456     现在要操作这两条记录进行比对 要删除第二条 (重点:要把第一条的信息从第二条中取到并补全第一条的空缺位置)
这样的话就会设计到一方面的问题 怎样判断第1条的哪些字段是空的。并把第2条的信息提取到第一条的空缺处  

解决方案 »

  1.   

    -- TRY IT ..
    SELECT NAME,
           MAX(SEX),
           MAX(BRITHDATE),
           MAX(ARG),
           MAX(IDCARD),
           MAX(ORG)
      FROM TABLE_NAME TT
     GROUP BY NAME;
      

  2.   

    1楼方法好,可以先将二条合并为一条,作为一条临时表,然后再更新第一条数据,再将第二条delete掉
      

  3.   


    为空的应该也没关系吧,lz试下下面的sql
    update table_name t set(SEX,BRITHDATE,ARG,IDCARD,ORG)=
    (SELECT
           MAX(SEX),
           MAX(BRITHDATE),
           MAX(ARG),
           MAX(IDCARD),
           MAX(ORG)
      FROM TABLE_NAME TT
     GROUP BY NAME where t.name=tt.name);没有测试啊,不知道正确不,这样update后二条sql再随便delete掉一个都行。
      

  4.   


    像arg字段,从数据上看应该取第二条,而idcard,则要取第一条
    这种规律看不出来的,就很难去取舍了
      

  5.   

    update table_name t set(SEX,BRITHDATE,ARG,IDCARD,ORG)=
    (SELECT
           MAX(SEX),
           MAX(BRITHDATE),
           MAX(ARG),
           MAX(IDCARD),
           MAX(ORG)
      FROM TABLE_NAME TT
     GROUP BY NAME where t.name=tt.name);
    是正确的。
      

  6.   

    update temp_tableName t set(SEX,BRITHDATE,ARG,IDCARD,ORG)= 
    (SELECT 
          MAX(SEX), 
          MAX(BRITHDATE), 
          MAX(ARG), 
          MAX(IDCARD), 
          MAX(ORG) 
      FROM temp_tableName TT 
      where t.name=tt.name GROUP BY NAME )
    WHERE t.rowid = (SELECT MIN(rowid) row_id FROM temp_tableName ttt   where t.name=ttt.name GROUP BY NAME ) 
      

  7.   

    update temp_tableName t set(SEX,BRITHDATE,ARG,IDCARD,ORG)= 
    (SELECT 
          MAX(SEX), 
          MAX(BRITHDATE), 
          MAX(ARG), 
          MAX(IDCARD), 
          MAX(ORG) 
      FROM temp_tableName TT 
      where t.name=tt.name GROUP BY NAME )
    WHERE t.rowid = (SELECT MIN(rowid) row_id FROM temp_tableName ttt   where t.name=ttt.name GROUP BY NAME );DELETE FROM  temp_tableName WHERE ROWID IN (SELECT MAX(ROWID) row_id FROM temp_tableName GROUP BY NAME);
      

  8.   

    update temp_tableName t set(SEX,BRITHDATE,ARG,IDCARD,ORG)= 
    (SELECT 
          MAX(SEX), 
          MAX(BRITHDATE), 
          MAX(ARG), 
          MAX(IDCARD), 
          MAX(ORG) 
      FROM temp_tableName TT 
      where t.name=tt.name GROUP BY NAME )
    WHERE t.rowid = (SELECT MIN(rowid) row_id FROM temp_tableName ttt   where t.name=ttt.name GROUP BY NAME );DELETE FROM  temp_tableName WHERE ROWID IN (SELECT MAX(ROWID) row_id FROM temp_tableName GROUP BY NAME);