Как насчет этого:
SET @row_num = 0;
SELECT (@row_num := @row_num + 1) AS "no",uid,id,valueA, "200" as cut FROM
(SELECT uid,id,IF(valueA/200 > 1,200,valueA) AS "valueA" FROM tableA UNION ALL
SELECT uid,id,IF(valueA/200 > 2,200,valueA-200) AS "valueA" FROM tableA UNION ALL
SELECT uid,id,IF(valueA/200 > 3,200,valueA-400) AS "valueA" FROM tableA) a
WHERE valueA > 0
ORDER BY uid,id,valueA DESC;
Если значение A делить на 200, равное более чем 1, возвращается 200, в противном случае возвращается только то, что находится в значении A. Это первый синтаксис среди UNION ALL
запросов.
Во втором случае я добавил еще одно условие, как если бы значение A, деленное на 200, НЕ равняется более чем 2, будет возвращено значение A-200. Вы можете попытаться выполнить UNION ALL
запросы, чтобы увидеть результаты.
Это не лучший способ сделать это, и я уверен, что есть лучшее решение, но я получил его, используя этот метод. Вы можете использовать это как временное решение или, по крайней мере, дать вам некоторые идеи.