2010-10-17 82 views
0

假設我有一組SQLite行,它們有一個自動增加字段「_id」,一個字符串字段「title」,一個整數字段「type」和一個整數字段「number」。基於查詢排序的SQL行數?

只有幾種類型(即1,2,3)。
所有數字字段當前都是空白的,我需要用1到N的數字填充類型爲1的所有行。這些數字應該與標題字段(升序)具有相同的排序順序。

行被編號後,SELECT * FROM TABLE WHERE type=1 ORDER BY title應返回與SELECT * FROM TABLE WHERE type=1 ORDER BY number完全相同的結果。

我可以通過查詢SELECT * FROM TABLE WHERE type=1 ORDER BY title並循環遍歷所有_id來逐行更新數字,但我正在尋找更有效的方法。

回答

0

您可以將ID設置爲具有較小的標題行數:

UPDATE YourTable 
SET  Id = (
      select count(*) 
      from YourTable t2 
      where t2.title < YourTable.title 
      ) + 1 

這假定沒有兩行標題相同。

+0

如果我能做出這樣的假設 – CodeFusionMobile 2010-10-17 19:45:02

0

如果您定義了一個帶有自動增量字段的臨時表,那麼以標題順序複製您的記錄應該以正確的順序爲它們分配數字 - 然後您可以將新數字複製回原始表。我沒有SqlLite來完全檢查代碼,但以下是它在Sql Server中的工作原理,使用表變量保持簡單:

DECLARE @autonumbering TABLE (_id INT, title NVARCHAR(100), number INT identity); 

INSERT INTO @autonumbering (_id, title) 
SELECT _id, title FROM realtable WHERE type = 1 ORDER BY title; 

UPDATE realtable 
SET realtable.number = autonumbers.number 
    FROM realtable JOIN @autonumbering AS autonumbers 
    ON realtable.type = 1 AND realtable._id = autonumbers._id;