可以用distinct和group by但是我只希望排除一个字段的重复数据,同时还希望select其他几个字段,
1、用group by只能select分组的字段,
2、用distinct会将select列表中的所有字段综合后排除重复,而不是我希望的那一个字段
3、如果建立临时表,用过程扫描整个表,去摘需要的数据插入临时表,这个动作又有点大了,怕影响用户使用请教有什么好办法??

解决方案 »

  1.   

    例如
    字段: test1_1, test1_2, test1_3
    数据: 1        12       33
          1        123      33
          1        12       111
          2        12       33
          2        123      12123
    以上这些数据,只希望排除在test1_1这个字段中数据重复的记录,同时还要select出test1_2和test1_3两个字段
    如果用 select distinct test1_1 from ... 这样结果是对的,但不能select出test1_2和test1_3
    如果用 select distinct test1_1, test1_2, test1_3 这样选出了三个字段,但是结果就不对了
      

  2.   

    表结构和数据就按lz说的,sql如下。select tt.*
    from (
          select t.test1_1,t.test1_2,t.test1_3,
                 RANK() OVER (PARTITION BY t.test1_1 order by rownum) Rnk
          from test t
    )tt
    where tt.Rnk <2;
      

  3.   

    字段: test1_1, test1_2, test1_3 
    数据: 1        12      33 
          1        123      33 
          1        12      111 
          2        12      33 
          2        123      12123 
    你要的结果是不是:字段: test1_1, test1_2, test1_3 
    数据: 1        12       33 
                   123      33 
                   12       111 
          2        12       33 
                   123      12123 
    是不是?
      

  4.   


    --表结构
    create table THINK_TEST
    (
      TRANSSTATIONID VARCHAR2(20),
      STATIONID      VARCHAR2(20),
      TEST1          VARCHAR2(20)
    )
    --数据
    insert into THINK_TEST (TRANSSTATIONID, STATIONID, TEST1)
    values ('456', '1', '1');
    insert into THINK_TEST (TRANSSTATIONID, STATIONID, TEST1)
    values ('222222222', '2', '1');
    insert into THINK_TEST (TRANSSTATIONID, STATIONID, TEST1)
    values ('333333333', '2', '2');
    insert into THINK_TEST (TRANSSTATIONID, STATIONID, TEST1)
    values ('444444444', '3', '2');
    commit;select * from think_test;
    TRANSSTATIONID       STATIONID            TEST1
    -------------------- -------------------- --------------------
    456                  1                    1
    222222222            2                    1
    333333333            2                    2
    444444444            3                    2select tt.*
    from (
          select t.test1,t.transstationid,t.stationid,
                 RANK() OVER (PARTITION BY t.test1 order by rownum) Rnk
          from think_test t
    )tt
    where tt.Rnk <2;TEST1                TRANSSTATIONID       STATIONID                   RNK
    -------------------- -------------------- -------------------- ----------
    1                    456                  1                             1
    2                    333333333            2                             1
      

  5.   

    select decode(rnk,1,t01,'') t01,t02,t03
    from (
          select t.t01,t.t02,t.t03,
                 RANK() OVER (PARTITION BY t.t01 order by rownum) Rnk
          from test t
    )tt
    得出来的结果就是上面的显示的!
      

  6.   


    非常非常感谢!以前曾经用过这种格式的row_number()分析函数,去做分页,但是对于这些有用的函数的用法、涵义等还是知道的太少了,请教哪里有中文的资料??谢谢
      

  7.   

    lz可以去看看plsql开发方面的书籍,应该有你想了解的。