1

私のDBには20列ほどあります。個別の Ref_ID を持つものだけを選択する必要がありますが、個別の (ref_ID) を使用すると、これらの値のリストのみが取得されます。すべての列、たとえばすべてのレコードを取得する必要がありますが、個別の ref_id があります。
Oracle 9g を使用しています。
たとえば、10 件のレコードがあり、そのうち 5 件は同じ ref_id を持っています。したがって、select は、すべての列を含むこれら 5 つのレコードのみを返す必要があります。

4

3 に答える 3

3

これを試してください:http://www.sqlfiddle.com/#!4/9f1ae/10

select *
from
(
  select rank() over(partition by d_let order by d_num) rank, tbl.*
  from tbl
  order by d_let
) x
where x.rank = 1 -- only the first row among duplicates

データ:

CREATE TABLE tbl
    (d_let varchar2(1), d_num int)
/
INSERT ALL
    INTO tbl (d_let, d_num)
         VALUES ('a', 1)
    INTO tbl (d_let, d_num)
         VALUES ('a', 2)
    INTO tbl (d_let, d_num)
         VALUES ('a', 3)
    INTO tbl (d_let, d_num)
         VALUES ('b', 6)
    INTO tbl (d_let, d_num)
         VALUES ('b', 3)
    INTO tbl (d_let, d_num)
         VALUES ('c', 2)
    INTO tbl (d_let, d_num)
         VALUES ('c', 3)
    INTO tbl (d_let, d_num)
         VALUES ('c', 5)
    INTO tbl (d_let, d_num)
         VALUES ('c', 6)
    INTO tbl (d_let, d_num)
         VALUES ('c', 4)
SELECT * FROM dual

出力:

RANK        D_LET   D_NUM
1           a       1
1           b       3
1           c       2
于 2012-05-03T07:16:25.267 に答える
2

何を意味するのかわかりにくいですが、ここにアイデアがあります。これは、テーブルに複数回含まれている REF_ID 値を返します。

select * from YOUR_TABLE
where REF_ID in(
    select REF_ID from YOUR_TABLE
    group by 
      REF_ID
    having
      count(REF_ID) > 1)
于 2012-05-03T07:03:39.263 に答える