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