SELECT номер_по_порядку,name,city FROM myTable
1 Петров Москва
2 Иванов Минск
3 Сидоров Киев
4 Смирнов Киров
5 Малевич Сидней
Ответов: 2313
Рейтинг: 679
|
|||
Подскажите кто знает как вывести номер строки по порядку при SELECT. Пробовал различные варианты и не один не заработал. Нужно при таком запросе:
|
|||
карма: 11 |
|
Ответов: 866
Рейтинг: 186
|
|||
sla8a писал(а): Подскажите кто знает как вывести номер строки по порядку при SELECTЭто имелось в виду?
--- Добавлено в 2025-02-18 16:32:51 sla8a, или даже так.
Редактировалось 2 раз(а), последний 2025-02-18 16:32:51 |
|||
карма: 18 |
|
Ответов: 2313
Рейтинг: 679
|
|||
Gunta, спасибо что откликнулись. Мне нужен номер по порядку строк в таблице в независимости от того как они записаны в базе данных. ROWID точно для этих целей не подходит. Достаточно отсортировать по city:
Перепробовал много различных вариантов из того что удалось найти и не один не заработал. Прикручивать отдельно счетчик выдаваемых строк DSC_Query по onQuery мне не подходит. |
|||
карма: 11 |
|
Ответов: 866
Рейтинг: 186
|
|||
Второй вариант у меня работает. Всё делал по инструкции - https://www.sqlitetutorial.net/sqlite-window-functions/sqlite-row_number/
![]() Попробуйте скачать последнюю и попробовать с ней https://www.sqlite.org/download.html |
|||
карма: 18 |
|
Ответов: 136
Рейтинг: 3
|
|||
2006г..... версия sqlite в папке Hiasm. Наверное настало время его обновить
![]() Второй вариант у меня выдает ошибку с таким текстом: near "(": syntax error: С версией 3.48 работает. Редактировалось 2 раз(а), последний 2025-02-19 08:16:02 |
|||
карма: 1 |
|
Ответов: 2313
Рейтинг: 679
|
|||
Gunta писал(а): Попробуйте скачать последнюю и попробовать с ней
Редактировалось 1 раз(а), последний 2025-02-19 08:17:47 |
|||
карма: 11 |
|
Ответов: 866
Рейтинг: 186
|
|||
sla8a писал(а): Скачал версию 3.49.1 второй пример перестал выдавать ошибку, но и не решил мою проблему:Запрос должен быть чуть другим
Редактировалось 1 раз(а), последний 2025-02-19 08:26:42 |
|||
карма: 18 |
|
Ответов: 2313
Рейтинг: 679
|
|||
Gunta, а нет какого-то универсального запроса, чтоб он не зависел от ORDER BY от INNER JOIN и прочего. Неужели то что мне нужно это что-то сверхъестественное?
|
|||
карма: 11 |
|
Ответов: 517
Рейтинг: 166
|
|||
Gunta писал(а): Запрос должен быть чуть другимЭтот вариант у меня работает . Windows 11 Pro 24H2. Версия sqlite3 3.49.1 ![]() В SQLite можно использовать подзапрос или оконную функцию `ROW_NUMBER()` (если версия SQLite поддерживает оконные функции, начиная с версии **3.25.0**). Вот как это можно сделать: ### 1. **С использованием оконной функции `ROW_NUMBER()` (рекомендуется, если версия SQLite ≥ 3.25.0):** ```sql SELECT ROW_NUMBER() OVER (ORDER BY name) AS номер_по_порядку, name, city FROM myTable; ``` Этот запрос добавит нумерацию строк, отсортированных по столбцу `name`. --- ### 2. **С использованием подзапроса (подходит для всех версий SQLite):** Если у вас старая версия SQLite, которая не поддерживает оконные функции, можно использовать подзапрос для нумерации строк: ```sql SELECT (SELECT COUNT(*) FROM myTable t2 WHERE t2.rowid <= t1.rowid) AS номер_по_порядку, name, city FROM myTable t1 ORDER BY name; ``` Этот запрос работает следующим образом: - Подзапрос `(SELECT COUNT(*) FROM myTable t2 WHERE t2.rowid <= t1.rowid)` считает количество строк, у которых `rowid` меньше или равен текущему `rowid`, что и создает нумерацию. - `ORDER BY name` сортирует строки по столбцу `name`. --- ### 3. **С использованием временной таблицы (альтернативный способ):** Если вам нужно сохранить порядок, можно создать временную таблицу с нумерацией: ```sql -- Создаем временную таблицу с нумерацией CREATE TEMP TABLE temp_table AS SELECT ROW_NUMBER() OVER (ORDER BY name) AS номер_по_порядку, name, city FROM myTable; -- Выбираем данные из временной таблицы SELECT * FROM temp_table; -- Удаляем временную таблицу (если больше не нужна) DROP TABLE temp_table; ``` --- ### Пример результата: Для таблицы `myTable`: | name | city | |----------|---------| | Петров | Москва | | Иванов | Минск | | Сидоров | Киев | | Смирнов | Киров | | Малевич | Сидней | Результат запроса будет: | номер_по_порядку | name | city | |------------------|----------|---------| | 1 | Петров | Москва | | 2 | Иванов | Минск | | 3 | Сидоров | Киев | | 4 | Смирнов | Киров | | 5 | Малевич | Сидней | --- ### Важно: - Если вы используете `ORDER BY`, убедитесь, что он соответствует вашим требованиям к сортировке. - Если версия SQLite старая (ниже 3.25.0), используйте подзапрос или временную таблицу. |
|||
карма: 4 |
|
Ответов: 2313
Рейтинг: 679
|
|||
tig-rrr, первый вариант и третий мне не подходит:
sla8a писал(а): чтоб он не зависел от ORDER BY от INNER JOIN и прочегоВторой у меня не работает (выдает номер не по порядку):
Нахожусь в некотором недоумении по данному вопросу. Почему это в БД реализовано через одно место? Есть много различных нужных плюшек под любые задачи, но такая простая задача требует каких-то плясок с бубном. Редактировалось 1 раз(а), последний 2025-02-19 12:19:18 |
|||
карма: 11 |
|
Ответов: 866
Рейтинг: 186
|
|||
sla8a писал(а): а нет какого-то универсального запроса, чтоб он не зависел от ORDER BY от INNER JOIN и прочего. Неужели то что мне нужно это что-то сверхъестественное?![]()
|
|||
карма: 18 |
|
Ответов: 517
Рейтинг: 166
|
|||
sla8a писал(а): Второй у меня не работает (выдает номер не по порядку):sla8a, если в запросе удалить ORDER BY name; то работает ...) |
|||
карма: 4 |
|
Ответов: 866
Рейтинг: 186
|
|||
sla8a, Ну и конечно всегда можно костыль вставить. Как же без них.
|
|||
карма: 18 |
|
Ответов: 2313
Рейтинг: 679
|
|||
Вот небольшой пример в общих чертах показывающий работу моей программы:
Gunta писал(а): всегда можно костыль вставитьТак у меня и стоит костыль почти с самого начала проекта на выдачу номера по порядку. А тут увеличилось количество функций и захотелось избавиться от костыля. |
|||
карма: 11 |
|
Ответов: 866
Рейтинг: 186
|
|||
sla8a, поправил, всё вроде работает. Не стал менять дданные в твоей базе. Думаю, разберёшся
Редактировалось 1 раз(а), последний 2025-02-19 17:08:14 |
|||
карма: 18 |
|