Что-то вроде этого запроса должно сделать:
Select some_value, x, c
From
(
Select
some_value, x,
Case When x=1 Then @c1 Else @c2 End As c,
@c1 := Case When x=1 Then @c1+2 Else @c1 End As c1,
@c2 := Case When x=2 Then @c2+2 Else @c2 End As c2
From test_data, (Select @c1:=0, @c2:=1) v
Order By some_value
) sub
Order By c
Он присваивает уникальные четные числа x=0
, а нечетные числа x=1
и использует эти значения в качестве критериев сортировки.
Возвращает
some_value x c
A 1 0
X 2 1
B 1 2
Y 2 3
C 1 4
Z 2 5
для следующих тестовых данных:
Create Table test_data (
some_value VARCHAR(10),
x INT
);
Insert Into test_data Values('A', 1);
Insert Into test_data Values('B', 1);
Insert Into test_data Values('C', 1);
Insert Into test_data Values('Z', 2);
Insert Into test_data Values('Y', 2);
Insert Into test_data Values('X', 2);
Внутри переменных значений правила отсортированы по some_value
, вы можете изменить этово внутреннем выберите или добавьте свои условия там.
Если есть еще значения определенного типа (1
или 2
), вы получите их после остальных (1 2 1 2 2 2
).