我有一个包含字段
的表格测试表Id Name Status
1 John active
2 adam active
3 cristy incative
4 benjamin inactive
5 mathew active
6 thomas inactive
7 james active
我想要一个应该显示重新填充的查询
Id Name Status
1 John active
3 cristy incative
2 adam active
4 benjamin inactive
5 mathew active
6 thomas inactive
7 james active
我的问题是如何以活动状态的顺序记录,然后处于非活动状态,然后处于活动状态,然后处于非活动状态等。就像来自此表的那样。
答案 0 :(得分:2)
最后我得到了答案
SET @rank=0;
SET @rank1=0;
SELECT @rank:=@rank+1 AS rank,id,name,status FROM `testtablejohn` where status='E'
UNION
SELECT @rank1:=@rank1+1 AS rank,id,name,status FROM `testtablejohn` where status='D'
order by rank
答案 1 :(得分:1)
此查询对交错的活动/非活动状态进行排序:
SELECT [id],
[name],
[status]
FROM (
(
SELECT
Row_number() OVER(ORDER BY id) AS RowNo,
0 AS sorter,
[id],
[name],
[status]
FROM testtable
WHERE [status] = 'active'
)
UNION ALL
(
SELECT
Row_number() OVER(ORDER BY id) AS RowNo,
1 AS sorter,
[id],
[name],
[status]
FROM testtable
WHERE [status] = 'inactive'
)
) innerUnion
ORDER BY ( RowNo * 2 + sorter )
此方法在两个SELECT语句上使用内部UNION,一个返回活动行,另一个返回非活动行。它们都生成了RowNumber,稍后再乘以2以确保它始终均匀。有一个分拣机列只是一个字段,并确保一个唯一的数字可用于排序:将它添加到RowNumber产生一个奇数或偶数,取决于活动/非活动状态,因此允许结果要交错。
SQL Fiddle链接在这里,允许测试和操作: http://sqlfiddle.com/#!3/8a8a1/11/0
在没有指定的数据库系统的情况下,我假设正在使用SQL Server 2008(或更新版本)。其他DBMS上需要备用行编号系统。
答案 2 :(得分:0)
由于你没有发布任何你到目前为止尝试过的例子,我也会限制我对一般方法的回答。
一种方法可能是为active
行生成行号,为inactive
行生成行号。从active
开始编号为1并且仅使用奇数(这意味着每次将计数器增加2)并对inactive
行使用2和偶数进行相同的操作。将这两个计数器放在同一列中。
您将最终使用单个列轻松地在ORDER BY
子句中进行排序。
以下是一些可能对您有用的链接:
MySQL - Get row number on select
http://www.mysqltutorial.org/mysql-case-statement/
请试一试。如果你不能使它工作,那么告诉我们你到目前为止尝试了什么。在问题中发布一些示例代码,我们可以为您提供指导!