Попытка отобразить верхнюю сумму 3 из таблицы с помощью SQL-запроса в оракуле 11g..column типа varchar - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь составить список первых 3 записей из таблицы на основе некоторого количества, хранящегося в столбце FTE_TMUSD, который имеет тип данных varchar

ниже приведен запрос, который я пробовал

 SELECT  *FROM 
    (
    SELECT * FROM FSE_TM_ENTRY 
    ORDER BY FTE_TMUSD desc
    )
WHERE rownum <= 3
ORDER BY FTE_TMUSD DESC ;

о / п я получил

972,9680,963 -> значения FTE_TMUSD, которые не отображаются в desc

Я ожидаю, что o / p отобразит 3 верхние записи значений

1 Ответ

0 голосов
/ 20 мая 2019

что должно работать; встроенное представление упорядочено по FTE_TMUSD в порядке убывания, и вы выбираете значения из него.

То, что выглядит подозрительно - это значения, которые вы указали в качестве результата. Похоже, тип данных FTE_TMUSD равен VARCHAR2 (ах, да, это так, вы так сказали). Это означает, что значения сортируются как строки, а не числа - и кажется, что вы ожидаете числа . Итак, примените TO_NUMBER к этому столбцу. Обратите внимание, что произойдет сбой, если в столбце есть что-то, кроме чисел (например, если есть значение 972C).

Кроме того, альтернативой вашему запросу может быть использование аналитических функций, таких как row_number:

with temp as
  (select f.*,
          row_number() over (order by to_number(f.fte_tmusd) desc) rn
   from fse_tm_entry f
  )
select * 
from temp
where rn <= 3; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...