2010-10-17 3 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

Вы можете установить идентификатор для числа строк с меньшим названием:

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

Это предполагает, что нет двух строк с тем же названием.

+0

Было бы замечательно, если бы я мог сделать это предположение – CodeFusionMobile

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; 
Смежные вопросы