В этом запросе должны быть указаны все поля, которые вы заполняете:
SELECT
( SELECT COUNT(0)
FROM MyTable T1
WHERE (T1.c1 * 1000) + T1.c2 <= (T2.c1 * 1000) + T2.c2
) as 'position',
c1,
c2,
ID
FROM
MyTable T2
ORDER BY
(c1 * 1000) + c2
Теперь, чтобы заказать их по ID:
SELECT ID, c1, c2, position FROM
(SELECT
(SELECT COUNT(0)
FROM MyTable T1
WHERE (T1.c1 * 1000) + T1.c2 <= (T2.c1 * 1000) + T2.c2
) as 'position',
c1,
c2,
ID
FROM
MyTable T2
ORDER BY
(c1 * 1000) + c2
) T3
ORDER BY ID
Примечания
- Если внутренний
Order By
не работает, вы можете вывести промежуточные результаты в временную таблицу, а затем выбрать из временной таблицы окончательное предложение Order By.
- "1000" выше - это коэффициент. Вам необходимо убедиться, что этот коэффициент больше максимального значения c2, но не настолько высок, чтобы получить целочисленное переполнение.
Альтернативный метод
Вы можете вставить во временную таблицу со столбцом AutoIncrement, а затем выбрать значения из этой временной таблицы в зависимости от желаемого порядка.
http://www.sqlite.org/autoinc.html