Russian Qt Forum
Июнь 11, 2024, 07:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: SQLite3 какой SELECT нужен ?  (Прочитано 6031 раз)
-QT-
Гость
« : Май 19, 2009, 15:20 »

Всем привет !

В SQLite3 нужно получить пронумерованную выборку.

Используя VFP это производиться
Код:
SELECT RECNO() AS npp FROM tablename WHERE id > 25
Например, так (если SQL 2005+):
Код:
SELECT ROW_NUMBER() OVER (ORDER BY name) AS number, name  FROM sysobjects
Перерыл всю документацию по SQLite3 ничего подобного не нашел.
Помогите решить задачу.
Записан
kirill
Гость
« Ответ #1 : Май 19, 2009, 15:57 »

Интересный ответ из инета

Код:
select (select COUNT(0) 
                from tablename t1
                where t1.field <= t2.field
                ) as 'Row Number', field from tablename t2 ORDER BY field;

http://www.mail-archive.com/sqlite-users@sqlite.org/msg41515.html
Записан
-QT-
Гость
« Ответ #2 : Май 19, 2009, 16:30 »

Спасибо но это не помогло:
Код:
select (select COUNT(0) from goods t1 where t1.id <= t2.id) as 'npp', name from goods t2 where razmer = 40
Выдает номер кортежа в таблице:

17 Труба Ст3. 2"
29 Труба Ст3. 1/2"
30 Профиль 10х15 Ст3.

а нужно выдать:

1 Труба Ст3. 2"
2 Труба Ст3. 1/2"
3 Профиль 10х15 Ст3.

Или я не правильно интерпретировал пример
Записан
White Owl
Гость
« Ответ #3 : Май 19, 2009, 22:04 »

Код:
select (select COUNT(0) from goods t1 where t1.name <= t2.name and razmer = 40) as 'npp', name
 from goods t2 where razmer = 40
 order by name
Чтобы это работало надо:
а) Внутренний селект должен повторять внешний по всем условиям выборки.
б) Внешний селект должен быть отсортирован по уникальному полю
в) Внутренний должен иметь < или <= связь с внешним по тому же полю по которому делается сортировка внешнего
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #4 : Май 20, 2009, 02:39 »

там есть псевдополе ROWID - но это наверное не подойдет если вам нужен именно порядковый номер (хотя какое БД имеет понятие о порядковом номере - записи в большинстве таблиц не имеется определенного порядка - даже последующийй селект может вернуть записи в другом порядке)

если бы поддерживал Хранимые процедуры - можно было бы написать такую для выборки записей из вашей таблицы + псевдостолбец с инкрементирующимся int - а так даже если заставите работать предыдущий запрос - на больших объемах данных помрет скореев всего....

Может отселектите query - а потом все данные загоните в другой контейнер и уже там проставите номер записи? То есть все произойдет на клиенте?
Записан
-QT-
Гость
« Ответ #5 : Май 20, 2009, 08:07 »

Код:
select (select COUNT(0) from goods t1 where t1.name <= t2.name and razmer = 40) as 'npp', name
 from goods t2 where razmer = 40
 order by name
Чтобы это работало надо:
а) Внутренний селект должен повторять внешний по всем условиям выборки.
б) Внешний селект должен быть отсортирован по уникальному полю
в) Внутренний должен иметь < или <= связь с внешним по тому же полю по которому делается сортировка внешнего

Вау!!! Больше спасибо все работает как нужно.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.039 секунд. Запросов: 19.