Вы можете использовать row_number()
, но подзапрос не нужен:
select
col1,
case when row_number() over(partition by col2 order by col1, col3) = 1 then col2 end col2
col3
from mytable t
where ...
order by t.col2, col1, col3
Обратите внимание, что для того, чтобы это работало (и чтобы ваш вопрос имел смысл вообще), вам нужны некоторые вид порядка упорядочения в наборе результатов, поэтому его можно однозначно указать с помощью строки: first . Я предположил, что вы хотите упорядочить строки, используя два других столбца (и я также упорядочил набор результатов соответственно).
Также обратите внимание, что это решение должно работать одинаково хорошо, если имеется более одного отдельного col2
в набор результатов; результаты будут отсортированы, и будет отображаться только первый случай заданного значения col2
.