有这样一张表:A  B  C  D  E
--------------
1  2  3  5  6
1  2  3  7  8
1  2  3  8  9现在想针对A, B, C三列做过滤,即,如果A、B、C三列数据都相同,那么只取其中一行。对于上面的例子,就要选出三行中的任意一行。注意:结果集中需要包含所有列。

解决方案 »

  1.   

    利用dbms_random.value()随机排序;SQL> select * from ta order by dbms_random.value();         A          B          C          D          E
    ---------- ---------- ---------- ---------- ----------
             1          2          3          5          6
             1          2          3          7          8
             1          2          3          8          9SQL> /         A          B          C          D          E
    ---------- ---------- ---------- ---------- ----------
             1          2          3          7          8
             1          2          3          5          6
             1          2          3          8          9SQL> /         A          B          C          D          E
    ---------- ---------- ---------- ---------- ----------
             1          2          3          7          8
             1          2          3          5          6
             1          2          3          8          9SQL> /         A          B          C          D          E
    ---------- ---------- ---------- ---------- ----------
             1          2          3          7          8
             1          2          3          8          9
             1          2          3          5          6
      

  2.   

    这个SQL看怎么样。SELECT *
    FROM TABLE_NAME
    WHERE (A,B,C,ROWID) IN
    (
    SELECT A, B, C, MAX(ROWID) AS ROWID1
    FROM TABLE_NAME
    GROUP BY A, B, C
    )
    ;
      

  3.   

    我需要的是select出其中任意一列...select A,B,C from T group by A,B,C 这样只能选出A,B,C三列,但是我也需要D,E两列。
      

  4.   

    做一下简化。SELECT * 
    FROM TABLE_NAME 
    WHERE ROWID IN 

    SELECT MAX(ROWID) AS ROWID1 
    FROM TABLE_NAME 
    GROUP BY A, B, C