Количество строк SQL на основе сортировки запросов? - PullRequest
0 голосов
/ 17 октября 2010

Скажем, у меня есть ряд строк SQLite, которые имеют поле автоматического увеличения "_id", строковое поле "title", целочисленное поле "type" и целочисленное поле "number".

Есть только несколько типов (то есть 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 для обновления номеров по строкам, но я ищу более эффективный подход.

Ответы [ 2 ]

0 голосов
/ 10 января 2011

Если вы определяете временную таблицу с полем автоинкремента, то при копировании ваших записей там в порядке заголовков следует назначать им номера в правильном порядке - тогда вы можете скопировать новые номера обратно в исходную таблицу. У меня нет 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;
0 голосов
/ 17 октября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...