SQL切换选择的偶数/奇数值

时间:2014-11-19 12:15:43

标签: mysql sql switch-statement

目前我从2个表中选择了这个:

(SELECT e.id, e.num, '1' as TBL
FROM events e
)

UNION ALL

(SELECT p.id, p.num, '2' as TBL
FROM places p
)

ORDER BY 2 DESC

它返回num排序的值,如下所示:

id  |  num  |  TBL
 3  |    9  |    2
 1  |    8  |    2
 4  |    7  |    1
 1  |    4  |    1
 7  |    1  |    2

但我的目标是在选择中混合表而不会丢失特定表中的ORDER。像这样:

id  |  num  |  TBL
 3  |    9  |    2
 4  |    7  |    1
 1  |    8  |    2
 1  |    4  |    1
 7  |    1  |    2

提前致谢!我感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

如果要交错表格,则需要其他信息。如果枚举每一行,则可以使用它进行排序。像这样:

(SELECT e.id, e.num, '1' as TBL, (@rn1 := @rn1 + 1) as rn
 FROM events e CROSS JOIN
      (SELECT @rn1 := 0) vars
 ORDER BY e.num desc
)
UNION ALL
(SELECT p.id, p.num, '2' as TBL, (@rn2 := @rn2 + 1) as rn
 FROM places p CROSS JOIN
      (SELECT @rn2 := 0) vars
 ORDER BY p.num desc
)
ORDER BY rn, tbl desc;

答案 1 :(得分:0)

试试这个:

DECLARE @t TABLE (rn INT IDENTITY,id INT,TBL INT)

INSERT INTO @t (id, TBL) SELECT id,1 FROM events INSERT INTO @t SELECT id,2 FROM places

DECLARE @t2 TABLE (rn INT IDENTITY,num numeric(18,2))

INSERT INTO @t2 (num) ( SELECT num FROM events UNION ALL SELECT num FROM places) ORDER BY num DESC

SELECT id, num, TBL FROM @t a JOIN @t2 b ON a.rn = b.rn