sql选择以特定记录开头

时间:2009-12-02 19:12:14

标签: sql mysql

有没有办法写一个以特定记录开头的选择记录?假设我有一个包含以下数据的表:

 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。

3 个答案:

答案 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'