The following is a SELECT base that you can use to update your table or to get results
Fixed issues with:
SELECT Name, ROW_NUMBER() over (ORDER By RowNumber) SortOrder FROM ( SELECT TOP 100 PERCENT Name, ROW_NUMBER() over (ORDER By RowName, Value DESC) RowNumber FROM (SELECT TOP 100 PERCENT Name,RowName = CASE WHEN Name LIKE 'Lower %[%]%' THEN 'LowerP' WHEN Name LIKE 'Lower %' THEN 'LowerS' WHEN Name LIKE 'Min_Low%' THEN 'LowerX' ELSE 'LowerZ' + Name END, Value = CASE WHEN Name LIKE 'Lower %[%]%' THEN CONVERT(float, SUBSTRING(Name, 6, LEN(Name)-6)) WHEN Name LIKE 'Lower %' THEN CONVERT(float, SUBSTRING(Name, 6, 10)) WHEN Name LIKE 'Min_Low%' THEN CONVERT(float, SUBSTRING(Name, 8, 10)) ELSE 100 END FROM Sorting WHERE Name NOT LIKE '%Up%' ORDER BY RowName, Value DESC) a UNION SELECT TOP 100 PERCENT Name, ROW_NUMBER() over (ORDER By RowName, Value ASC) + 1000 RowNumber FROM ( SELECT TOP 100 PERCENT Name,RowName = CASE WHEN Name LIKE 'Min_Up%' THEN 'UpperA' WHEN Name LIKE 'Upper %' AND NOT SUBSTRING(Name, LEN(Name), 1) = '%' THEN 'UpperB' WHEN SUBSTRING(Name, LEN(Name), 1) = '%' THEN 'UpperC' ELSE 'Middle' END, Value = CASE WHEN Name LIKE 'Upper %[%]%' THEN CONVERT(float, SUBSTRING(Name, 6, LEN(Name)-6)) WHEN Name LIKE 'Upper %' THEN CONVERT(float, SUBSTRING(Name, 6, 10)) WHEN Name LIKE 'Min_Up%' THEN CONVERT(float, SUBSTRING(Name, 7, 10)) ELSE 100 END FROM Sorting WHERE Name LIKE '%Up%' ORDER BY RowName, Value ASC ) b ORDER BY RowNumber ) c
source share