Я никогда только что попробовал это, но вы можете попробовать CAST
или CONVERT
столбец в порядке?
Попробуйте это ...
SELECT
...
FROM
...
ORDER BY
CAST(MyColumn AS Decimal(18,2))
Это работает:
CREATE TABLE #t
(
mycol varchar(20)
)
INSERT INTO #t(mycol) VALUES('1.0')
INSERT INTO #t(mycol) VALUES('1.10')
INSERT INTO #t(mycol) VALUES('2.10')
INSERT INTO #t(mycol) VALUES('21.20')
INSERT INTO #t(mycol) VALUES('2.00')
SELECT * FROM #t ORDER BY CAST(mycol as Decimal(18,2))
DROP TABLE #t

Ваш стал бы:
SELECT
AssessmentID,
AssessmentRefNumber,
DetailRefNumber
FROM
Assessments
ORDER BY
CAST(DetailRefNumber As Decimal(18,2))
редактировать
Только что заметил "сортировку номера версии".
Возьмите именно то, что я сделал, и измените заключительную часть, чтобы использовать подстроку / то, что опубликовал marc_s, работает приятно:
CREATE TABLE #t
(
mycol varchar(20)
)
INSERT INTO #t(mycol) VALUES('1.0')
INSERT INTO #t(mycol) VALUES('1.2')
INSERT INTO #t(mycol) VALUES('1.11')
INSERT INTO #t(mycol) VALUES('2.10')
INSERT INTO #t(mycol) VALUES('21.20')
INSERT INTO #t(mycol) VALUES('2.20')
INSERT INTO #t(mycol) VALUES('2.00')
INSERT INTO #t(mycol) VALUES('2.11')
INSERT INTO #t(mycol) VALUES('2.2')
SELECT
*
FROM #t
ORDER BY
CAST(LEFT(mycol, CHARINDEX('.', myCol)-1) AS int),
CAST(SUBSTRING(myCol, CharINDEX('.', mycol)+1, 999) AS int)