举个例子
有如下表id     name     age  sex
1      刘德华   48   男
2      郭富城   47    男
3      张柏芝    25   女
4      周慧敏   46   女
5      刘德华   48   男
6      周慧敏   46   女这样:如果发现  行之间  除id之外的所有列相同,只返回一行,如果我查询这张表,应该显示四条才行,求教!

解决方案 »

  1.   

    单纯 select distinct id,name,age,sex from tb 没问题你的怎么写得 贴上来
      

  2.   

    select distinct name,age,sex from tb 
      

  3.   


    select id,name,age,sex from(
       select id,name,age,sex,
              row_number()over(partition by name,age,sex order by id) rn 
       from table_name
    )
    where rn=1;
      

  4.   

    SQL> ed
    已写入 file afiedt.buf  1  with tb as(
      2  select 1 id,'刘德华' name, 48 age,'男' sex from dual
      3  union all
      4  select 2,'郭富城',47,'男' from dual
      5  union all
      6  select 3 ,'张柏芝',25,'女' from dual
      7  union all
      8  select 4 ,'周慧敏',46,'女' from dual
      9  union all
     10  select 5,'刘德华',48,'男' from dual
     11  union all
     12  select 6 ,' 周慧敏', 46,'女' from dual)
     13  select min(id) id,name,age,sex
     14  from tb
     15  group by name,age,sex
     16* order by id
    SQL> /        ID NAME           AGE SE
    ---------- ------- ---------- --
             1 刘德华          48 男
             2 郭富城          47 男
             3 张柏芝          25 女
             4 周慧敏          46 女
             6  周慧敏         46 女
      

  5.   

    --上面的有个周慧敏多了个空格SQL> ed
    已写入 file afiedt.buf  1  with tb as(
      2  select 1 id,'刘德华' name, 48 age,'男' sex from dual
      3  union all
      4  select 2,'郭富城',47,'男' from dual
      5  union all
      6  select 3 ,'张柏芝',25,'女' from dual
      7  union all
      8  select 4 ,'周慧敏',46,'女' from dual
      9  union all
     10  select 5,'刘德华',48,'男' from dual
     11  union all
     12  select 6 ,'周慧敏', 46,'女' from dual)
     13  select min(id) id,name,age,sex
     14  from tb
     15  group by name,age,sex
     16* order by id
    SQL> /        ID NAME          AGE SE
    ---------- ------ ---------- --
             1 刘德华         48 男
             2 郭富城         47 男
             3 张柏芝         25 女
             4 周慧敏         46 女
      

  6.   


    --我上面的SQL语句加个order by
    with tb as(
    select 1 id,'刘德华' name, 48 age,'男' sex from dual union all
    select 2 ,'郭富城', 47,'男' from dual union all
    select 3 ,'张柏芝', 25,'女' from dual union all
    select 4 ,'周慧敏', 46,'女' from dual union all
    select 5 ,'刘德华', 48,'男' from dual union all
    select 6 ,'周慧敏', 46,'女' from dual)
    select id,name,age,sex from(
       select id,name,age,sex,
              row_number()over(partition by name,age,sex order by id) rn 
       from tb
    )
    where rn=1 order by id;ID   NAME   AGE  SEX
    ---------------------
    1    刘德华   48   男
    2    郭富城   47   男
    3    张柏芝   25   女
    4    周慧敏   46   女
      

  7.   

    SQL> with tb as(
      2  select 1 id,'刘德华' name, 48 age,'男' sex from dual union all
      3  select 2 ,'郭富城', 47,'男' from dual union all
      4  select 3 ,'张柏芝', 25,'女' from dual union all
      5  select 4 ,'周慧敏', 46,'女' from dual union all
      6  select 5 ,'刘德华', 48,'男' from dual union all
      7  select 6 ,'周慧敏', 46,'女' from dual)
      8  select min(id),name,age,sex
      9     from tb
     10  group by name,age,sex
     11  order by min(id) ;
     
       MIN(ID) NAME          AGE SEX
    ---------- ------ ---------- ---
             1 刘德华         48 男
             2 郭富城         47 男
             3 张柏芝         25 女
             4 周慧敏         46 女
     
    SQL> 
      

  8.   

    select distinct name,age,sex from tb