2009-12-02 98 views
0

有什么方法可以从特定记录开始写入选择记录吗?假设我有以下数据表:sql选择以特定记录开始

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

你如何确定哪个“价值”应该优先?体重,个人选择? – 2009-12-02 19:16:28

+0

这是什么数据库? MySQL的? – 2009-12-02 19:16:32

+0

它的MySQL @astander:ID应该以B1 – JPro 2009-12-02 19:18:47

回答

7

夫妇的取决于你有什么不同的选择“知道”的时间提前(即你想成为第一个记载,SNO等的id):

联盟的做法:

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的等,但这些方法会可能性能更低......在您的环境中尝试几种不同的方法,以查看哪种方法效果最佳。

+0

开头非常感谢。我正在寻找案例的方法。 – JPro 2009-12-02 19:28:08

-1
select * from table1 
where id = 'B1' 
union all 
select * from table1 
where id <> 'B1' 
+0

为什么这个答案是-1? – JPro 2009-12-02 19:29:27

+0

不确定(即我没有投票),但我会认为这可能是因为要保证排序顺序,你需要添加一个“order by”子句(即这个查询将有可能返回数据任何订单)。不确定这是否值得下注,尤其是没有评论,但这是我的猜测。 – chadhoc 2009-12-02 20:09:24

+0

人们可能只是在“玩游戏”(向其他人投票以让他们的位置更好) – BlackTigerX 2009-12-02 23:08:34

0

假设你正在使用MySQL,你既可以IF()在使用ORDER BY子句...

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');