有没有办法写一个以特定记录开头的选择记录?假设我有一个包含以下数据的表:
SNO ID ISSUE
----------------------
1 A1 unknown
2 A2 some_issue
3 A1 unknown2
4 B1 some_issue2
5 B3 ISSUE4
6 B1 ISSUE4
我可以编写一个选择来开始显示以B1开头的记录,然后是剩余的记录吗?输出应该是这样的:
4 B1 some_issue2
6 B1 ISSUE4
1 A1 unknown
2 A2 some_issue
3 A1 unknown2
5 B3 ISSUE4
如果B3是最后一个并不重要,只要首先显示B1。
答案 0 :(得分:7)
一些不同的选项取决于你提前知道的东西(即你想要的记录的id,sno等):
联盟方法:
select 1 as sortOrder, SNO, ID, ISSUE
from tableName
where ID = 'B1'
union all
select 2 as sortOrder, SNO, ID, ISSUE
from tableName
where ID <> 'B1'
order by sortOrder;
案件陈述按顺序排列:
select SNO, ID, ISSUE
from tableName
order by case when ID = 'B1' then 1 else 2 end;
您还可以考虑使用临时表,cte等,但这些方法可能性能较差...在您的环境中尝试几种不同的方法,看看哪种方法效果最好。
答案 1 :(得分:0)
假设您使用的是MySQL,您可以在ORDER BY子句中使用IF()...
SELECT SNO, ID, ISSUE FROM table ORDER BY IF( ID = 'B1', 0, 1 );
...或者你可以定义一个强加你的排序顺序的函数......
DELIMITER $$
CREATE FUNCTION my_sort_order( ID VARCHAR(2), EXPECTED VARCHAR(2) )
RETURNS INT
BEGIN
RETURN IF( ID = EXPECTED, 0, 1 );
END$$
DELIMITER ;
SELECT SNO, ID, ISSUE FROM table ORDER BY my_sort_sort( ID, 'B1' );
答案 2 :(得分:-1)
select * from table1
where id = 'B1'
union all
select * from table1
where id <> 'B1'