Semblez que vous souhaitez trier en utilisant un ordre de tri personnalisé. Deux approches viennent à l'esprit: 1) mettre l'ordre de tri dans une table et utiliser cette table dans la requête; 2) utiliser une chaîne délimitée (en supposant que le nombre de valeurs dans le domaine est petit, stable et les valeurs de largeurs similaires et «étroites»).
S'il vous plaît excuser la syntaxe SQL Server, mais assez standard et nous espérons que vous avez l'idée générale:
par exemple 1
WITH MyTable (ID, data_col)
AS
(
SELECT ID, data_col
FROM (
VALUES (1, 'aa'),
(2, '111'),
(3, 'ccc'),
(4, 'bbb'),
(5, '111'),
(6, 'aa'),
(7, '111'),
(8, 'bbb')
) AS MyTable (ID, data_col)
),
MyDomainWithSortOrder (domain_col, sort_seq)
AS
(
SELECT ID, domain_col
FROM (
VALUES ('bbb', 1),
('111', 2),
('aa', 3),
('ccc', 4)
) AS MyDomainWithSortOrder (ID, domain_col)
)
SELECT T1.ID, T1.data_col, D1.sort_seq
FROM MyTable AS T1
INNER JOIN MyDomainWithSortOrder AS D1
ON T1.data_col = D1.domain_col
ORDER
BY sort_seq;
par exemple. 2
WITH MyTable (ID, data_col)
AS
(
SELECT ID, data_col
FROM (
VALUES (1, 'aa'),
(2, '111'),
(3, 'ccc'),
(4, 'bbb'),
(5, '111'),
(6, 'aa'),
(7, '111'),
(8, 'bbb')
) AS MyTable (ID, data_col)
)
SELECT ID, data_col
FROM MyTable
ORDER
BY CHARINDEX(CAST(data_col + ' ' AS CHAR(3)), 'bbb111aa ccc');
mieux expliqué à http://stackoverflow.com/questions/1793147/sql-best-practice-to-deal-with-default-sort-order/1793162#1793162 –