Use a split string CTE with ordered values. Hence you will be able to sort any of dataset
DECLARE @test nvarchar(100) = '6,34,5,4,3,2,1';
;WITH cte AS
(
SELECT SUBSTRING(@test , 0, CHARINDEX( ',', @test)) AS val ,
CAST(STUFF (@test + ',' , 1, CHARINDEX( ',', @test), '') AS nvarchar(100 )) AS stval,
1 AS [level]
UNION ALL
SELECT SUBSTRING(stval , 0, CHARINDEX( ',', stval)),
CAST(STUFF (stval, 1, CHARINDEX(',' , stval ), '' ) AS nvarchar(100 )),
[level] + 1
FROM cte
WHERE stval != ''
)
SELECT c2.CustID
FROM dbo.Customer c2 JOIN cte c ON c2.CustID = c.val
ORDER BY c.[level]
Demo on SQLFiddle
Also you can wrap CTE in function
CREATE FUNCTION dbo. SplitStrings_CTE(@List nvarchar( 1000), @Delimiter nvarchar(1 ))
RETURNS TABLE
AS
RETURN
WITH cte AS
(
SELECT SUBSTRING(@List , 0 , CHARINDEX (@Delimiter, @List)) AS val ,
CAST(STUFF (@List + @Delimiter, 1 , CHARINDEX (@Delimiter, @List), '') AS nvarchar (1000)) AS stval, 1 AS [level]
UNION ALL
SELECT SUBSTRING(stval , 0 , CHARINDEX (@Delimiter, stval)),
CAST(STUFF (stval , 1, CHARINDEX( @Delimiter , stval ), '' ) AS nvarchar(1000 )), [level] + 1
FROM cte
WHERE stval != ''
)
SELECT REPLACE(val , ' ' , '' ) AS val, [level]
FROM cte
SELECT statement with using function
DECLARE @test nvarchar(100) = '6,34,5,4,3,2,1';
SELECT CustID
FROM dbo.Customer c2 JOIN (SELECT val, [level] FROM dbo.SplitStrings_CTE(@test, ',')
) c ON c2.CustID = c.val
ORDER BY c.[level]
OR
DECLARE @test nvarchar(100) = '6,34,5,4,3,2,1';
SELECT CustID
FROM dbo.Customer c2 CROSS APPLY dbo.SplitStrings_CTE(@test, ',') c
WHERE c2.CustID = c.val
ORDER BY c.[level]
RDBMSstands for Relational Database Management System.RDBMS is the basis for SQL, and for all modern database systems like MS SQL Server, IBM DB2, Oracle, MySQL, etc...