像这样的查询应该做的事情:
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
)之后获取它们。