Вы можете использовать CHARINDEX
, чтобы найти положение точки (.
) в столбце и использовать числа перед этим для ORDER
вашего вывода:
SELECT *
FROM tableA
ORDER BY CAST(LEFT(Operation_type, CHARINDEX('.', Operation_type) - 1) AS INT)
Это полностью зависитхотя они всегда являются точкой (.
) в столбце.
Рабочая скрипка, показывающая, что это здесь .
Если вы не можете гарантировать, чтоточка всегда присутствует, эта версия использует подзапрос для работы с записями, которые ее не содержат:
SELECT Operation_type
FROM (
SELECT *,
CASE
WHEN CHARINDEX('.', Operation_type) > 0 THEN CAST(LEFT(Operation_type, CHARINDEX('.', Operation_type) - 1) AS INT)
ELSE 0
END AS OrderCol
FROM tableA
) a
ORDER BY OrderCol
В этом случае записи без точки появятся первыми в списке. Вы можете переместить их в конец, изменив ELSE 0
на большее значение.
Редактировать следующий комментарий о результатах DISTINCT
Следующий измененный запрос также обрабатывает дублирующиеся строки, используяDISTINCT
как вы просили:
SELECT Operation_type
FROM (
SELECT DISTINCT(Operation_type),
CASE
WHEN CHARINDEX('.', Operation_type) > 0 THEN CAST(LEFT(Operation_type, CHARINDEX('.', Operation_type) - 1) AS INT)
ELSE 0
END AS OrderCol
FROM tableA
) a
ORDER BY OrderCol