Я провел несколько тестов на моей базе данных ( SQLite 3.21.0 ), и кажется, что мое решение работает, но я боюсь, что это просто удача, а в некоторых случаях может не получиться, я хотел бызнать, является ли мое решение правильным ...
Кажется, что GROUP_CONCAT()
использует первичный ключ или если первичного ключа нет, он попытается найти числовой столбец и будет использовать его для порядка объединения, поэтому я хотелчтобы проверить мою теорию и решил использовать предложение WITH
для генерации "новой" таблицы, таким образом я установлю порядок, который GROUP_CONCAT
должен будет использовать
Вот что я сделал: (упрощенный запрос)
WITH data AS (SELECT cID,
pType || ':' || pID || ':' || pTotal || ':' ||
(CASE WHEN pDate IS NULL OR pDate = '' THEN '0' ELSE pDate END) fees
FROM Pay2015 AS A WHERE cID = A.cID AND pType > 1 ORDER BY pType)
SELECT A.cID, GROUP_CONCAT(data.fees, '|') fees FROM Pay2015 AS A
LEFT OUTER JOIN data ON A.cID = data.cID
WHERE A.cID = 98 AND pType = 0
WITH
data будет иметь таблицу с первым столбцом в качестве cID и будет 98 для каждой строки, она будет использоваться в соединении, GROUP_CONCAT
также должен будет использовать его, потому что это единственный числовой столбец, а ORDER BY
установит порядок строк, который мне нужен
Теперь основной запрос выполнит GROUP_CONCAT
для этой новой таблицы ( data)) и потому что data.cID одинаков для каждой строки, которую он будет объединятьукажите это
Для сравнения приведем обычный запрос с проблемой заказа:
SELECT cID, GROUP_CONCAT(pType || ':' || pID || ':' || pTotal || ':' ||
(CASE WHEN pDate IS NULL OR pDate = '' THEN '0' ELSE pDate END), '|') fees
FROM Pay2015 AS A WHERE cID = 98 AND pType > 1 ORDER BY pType
Pay2015 данные таблицы: (pID - первичный ключ)

И это результаты при заказе по pType: (я использую | , чтобы разделить, удалить всестолбцы, но pType для простоты)

Как видите, порядок результатов такой же, как порядок pID в обычном запросе
Что выдумаю