このクエリのようなものが行う必要があります:
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
)の後にそれらを取得します。