2009-12-02 178 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');