#sql #oracle
#sql #Oracle
Вопрос:
Рассмотрим приведенный ниже пример таблицы:
ID Value
123 ABC
456 DEF
456 ABC
Я хочу результат запроса select, как показано ниже:
ID Value
123 ABC
456 DEF
Примечание: Идентификатор имеет только 2 разных значения — «123» и «456». Выбор должен основываться на столбце «ID». Если присутствует значение «123», должны быть выбраны соответствующие данные из столбца «Значение». Если нет, должен быть получен идентификатор «456».
Комментарии:
1. опубликуйте фактическое значение ID, если это строка
2. Что вы подразумеваете под «Если присутствует значение «123» ?» в отношении чего? Вы сказали, что идентификатор имеет только 123 или 456, поэтому он должен присутствовать, не так ли?
Ответ №1:
простая группировка по поможет вам получить желаемый результат
select min(id), value
from table
group by value
Комментарии:
1. Извините, забыл упомянуть, что ID не является числом. Это строка. Таким образом, min (id) не помогает.
2. @Viswa использует его как числовое значение use TO_NUMBER
3. функция min может применяться не только к числам.
4. функция min не будет работать, если 123 равно yyy, а 456 равно xxx
5. @psaraj12 . . . Затем используйте
max()
. Можно ответить только на заданный вопрос, и это кажется самым простым ответом.
Ответ №2:
Что-то вроде этого:
select min(id) as id,
Value
from table
group by Value, id
Ответ №3:
Вы можете использовать приведенный ниже идентификатор, если он представляет собой строку, например, 456 — это ‘xxx’, а 123 — это ‘yyy’, здесь используется SQL-код
WITH tt1
AS (SELECT Decode(id, '123', 1,
2) order1,
id,
value1
FROM tt),
tt2
AS (SELECT Min(order1) order1,
value1
FROM tt1
GROUP BY value1)
SELECT tt1.id,
tt1.value1
FROM tt2,
tt1
WHERE tt1.value1 = tt2.value1
AND tt1.order1 = tt2.order1;