Как указать порядок, по которому выполняется группировка - PullRequest
0 голосов
/ 10 марта 2020

Имея таблицу msg вот так:

id, msgNo, frag
1, 1, AAA
2, 1, BBB
3, 1, CCC
4, 2, Hello

Я могу получить такой результат:

msgNo, mesg
1, AAABBBCCC
2, Hello

используя:

SELECT msgNo, STRING_AGG(CONVERT(NVARCHAR(MAX), frag), '') AS mesg
FROM msg
GROUP BY msgNo

Вопрос в том, как я могу получить это?:

msgNo, mesg
1, CCCBBBAAA
2, Hello

означает, что я объединяю строки в порядке убывания id. Если кто-то может дать мне объяснение как для MySQL, так и для Sql Сервера, это было бы здорово.

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Я не прочитал целые документы ...

Для SQL Сервер:

SELECT msgNo, STRING_AGG(CONVERT(NVARCHAR(MAX), frag), '') WITHIN GROUP (ORDER BY id ASC) AS mesg
    FROM msg
    GROUP BY msgNo

GROUP_CONCAT имеет аналогичные функции.

1 голос
/ 10 марта 2020

Попробуйте это

SELECT msgNo, GROUP_CONCAT(frg ORDER BY frg DESC SEPARATOR '') 
FROM (
   SELECT 1 as id, 1 as msgNo, 'AAA' as frg
   UNION SELECT 2, 1, 'BBB'
   UNION SELECT 3, 1, 'CCC'
   UNION SELECT 4, 2, 'Hello') tbl 
GROUP BY msgNo

Ваш запрос будет

SELECT msgNo, GROUP_CONCAT(frag ORDER BY frag DESC SEPARATOR '') AS mesg
FROM msg
GROUP BY msgNo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...