2014-10-28 51 views
-2

我有一個按列ID排序的SQLite表。但我需要通過另一個數字字段RunTime對其進行分類。如何重新編號表列

CREATE TABLE Pass_2 AS 
SELECT RunTime, PosLevel, PosX, PosY, Speed, ID 
FROM Pass_1 

Pass_2看起來不錯,但我需要從1 .. n重新編號ID列,而不訴諸記錄。

+1

你是什麼意思「重新排序(不是訴諸)1..n ID列沒有訴諸紀錄。」?您可以對行進行排序,也可以不排序。 – 2014-10-28 13:58:28

回答

2

這是一個SQL數據庫的原理,基礎表有沒有自然或保證訂單到他們的記錄。當使用ORDER BY子句從表中輸入SELECT時,必須指定要查看記錄的順序。

您可以使用SELECT * FROM your_table ORDER BY RunTime獲取您想要的記錄,這是在任何SQL數據庫中執行此操作的正確且可靠的方法。

如果你想嘗試獲得在Pass_2記錄爲「是」在運行系統命令,你可以在ORDER BY條款添加到SELECT您用於創建表,但請記住:你不能保證得到記錄按照它們被添加到表的順序返回。

什麼時候可以以不同的順序得到記錄?當您的查詢可以使用覆蓋索引中的列進行回答時,這很可能發生 - 在這種情況下,記錄更有可能以索引順序返回,而不是任何「自然」順序(但同樣,沒有使用ORDER BY子句的保證)。

+0

想象一下,表中的列值爲'1,2,5,9,3,7 ...'。我想用新值'1,2,3,4,5,6 ...'覆蓋該列。 – Nobby 2014-10-28 14:37:35

+0

生成列表'1,2,4,9,3,7'的'ORDER BY'子句是什麼? – 2014-10-28 15:01:45

+0

此外,請參閱此頁面https://www.sqlite.org/autoinc.html,以便將SQLite的隱藏'rowid'列作爲可能的*代理*用於添加到表格順序。 – 2014-10-28 15:05:05

0

如果您想要一個新的ID列,從1開始,則使用ROW_NUMBER()函數。而不是ID在您的查詢使用ROW_NUMBER() OVER(ORDER BY Runtime) AS ID....這將取代舊的ID列與一個新計算的列

+0

對不起格式化,該死的iPad ....難以使用的代碼格式....編輯感謝收拾它 – Grantly 2014-10-28 14:08:33

+0

這可能不可用在SQLlite ...不確定是否支持ROW_NUMBER。請參閱http://stackoverflow.com/questions/4074257/sqlite-equivalent-of-row-number-over-partition-by – Grantly 2014-10-28 14:19:28