表结构
ID   NAME  
1     ABC
2     ABC
3     ABC
4     BBB
....最后想要的结果是
ID   NAME   PID   PNAME
2    ABC     1     ABC
3    ABC     1     ABC4不要求语句

解决方案 »

  1.   

    DECLARE @a TABLE(ID int,NAME VARCHAR(20))
    INSERT @a SELECT 1     ,'ABC'
    UNION ALL SELECT 2     ,'ABC'
    UNION ALL SELECT 3     ,'ABC'
    UNION ALL SELECT 4     ,'BBB'SELECT a.*,b.* FROM @a a,@a b WHERE  a.id>(SELECT MIN(id) FROM @a WHERE NAME=a.name) 
    AND b.id=(SELECT MIN(id) FROM @a WHERE NAME=a.name)--result
    /*ID          NAME                 ID          NAME                 
    ----------- -------------------- ----------- -------------------- 
    2           ABC                  1           ABC
    3           ABC                  1           ABC(所影响的行数为 2 行)*/
      

  2.   


    OK,那个ID不是有序的,请问这如何是好?
      

  3.   

    好吧,可能是我没有讲清楚。
    表结构
     ID   NAME  
     1     ABC
     2     ABC
     3     ABC
     4     BBB
     ....
     
    最后想要的结果是
     ID   NAME   PID   PNAME
     2    ABC     1     ABC
     3    ABC     1     ABC如果
    表结构
     ID   NAME
     2     ABC  
     1     ABC
     3     ABC
     4     BBB
     ....
     
    最后想要的结果是
     ID   NAME   PID   PNAME
     1    ABC     2     ABC
     3    ABC     2     ABC不知道这样是如何做?
    就是谁在第一条的,就到右面的Pid Pname去
    后面的数据都是如此。
      

  4.   

    DECLARE @a TABLE(ID int,NAME VARCHAR(20))
    INSERT @a SELECT 2     ,'ABC'
    UNION ALL SELECT 1     ,'ABC'
    UNION ALL SELECT 3     ,'ABC'
    UNION ALL SELECT 4     ,'BBB'
     
    SELECT a.*,b.* FROM @a a,@a b WHERE  a.id<>(SELECT TOP 1 id FROM @a WHERE NAME=a.name) 
    AND b.id=(SELECT TOP 1 id FROM @a WHERE NAME=a.name)
     
    --result
    /*
    ID          NAME                 ID          NAME                 
    ----------- -------------------- ----------- -------------------- 
    1           ABC                  2           ABC
    3           ABC                  2           ABC(所影响的行数为 2 行)
    */