Oracle, получить Rowid из другого запроса (Distinct) и выбрать значение с помощью rowid - PullRequest
1 голос
/ 06 февраля 2020

У меня есть этот запрос

Select Distinct field FROM some_table;

предположим,

FIELD
_____
A
B
C
D
E

Теперь мне нужно получить из запроса выше Rowid.

Я не знаю, как включить запрос before.

SELECT rowid from (Select Distinct field FROM some_table /*???*/ );

ROWID
_____
1
2
3
4
5

Третий шаг - показать содержимое поля, с ROWID

Select value from (???) WHERE rowid= 3

VALUE
_____
C

RESUME Мне нужно выбрать строку, похожую на результат различного запроса. Input '5' Output 'E'

Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Проблема в том, что rowid является уникальным для строки, и вы намереваетесь select distinct значения поля. Предполагая, что у вас есть эта схема:

create table test(
    a int primary key,
    b int not null
);

insert into test(a, b)
values (1, 1);

insert into test(a, b)
values (2, 1);

insert into test(a, b)
values (3, 1);

insert into test(a, b)
values (4, 4);

Если вы запустите

select min(rowid), b
from test
group by b;

, это приведет к двум записям, поскольку для b есть два разных значения. Я выбрал наименьшее rowid для сопряжения с этим.

Вы даже можете объединить rowid вхождений строки:

select LISTAGG(ROWIDTONCHAR(rowid), ', ') WITHIN GROUP (ORDER BY rowid) "rowids", b
from test
group by b;

См .: http://sqlfiddle.com/#! 4 / ee73a / 7

0 голосов
/ 06 февраля 2020

Вы можете использовать функцию ROW_NUMBER() analyti c:

SELECT value
  FROM
  (
    SELECT field AS value, ROW_NUMBER() OVER (ORDER BY field) AS row_id
      FROM ( SELECT distinct field FROM some_table )   
    )
  WHERE row_id = 3

Демо

...