Вы можете заменить строку
GROUP BY OUN.note
с линией
ORDER BY OUN.outcomeKey
Кроме того, поскольку конкатенация начинается с ',', вы можете использовать 1, 2, '' в качестве дополнительных аргументов функции STUFF. В противном случае значения в столбце [Результат] всегда начинаются с пробела.
Edit:
Кстати, сортировка заметок по resultKey в подзапросе, который генерирует значения для столбца [Outcome note], не имеет никакого эффекта ... поскольку все заметки в каждом результате подзапроса будут иметь одинаковое значение resultKey ...
Но вы, конечно, можете сортировать по любому столбцу. Возможно, в вашей таблице OutcomeNotes есть другие столбцы, которые могут быть полезны для сортировки ваших записей результатов.
Если я неправильно понял ваш вопрос, пожалуйста, предоставьте определения таблиц Outcome и OutcomeNote, вместе с демоверсией этих таблиц и желаемым / ожидаемым результатом запроса, пожалуйста.
Редактировать 2:
Начиная с SQL Server 2017, Transact-SQL содержит функцию STRING_AGG, которая функционально эквивалентна (более или менее) функции MySQL GROUP_CONCAT. Используя эту функцию, ваш запрос станет примерно таким:
SELECT
OUN.outcomeKey [Outcome Key],
OC.outcome [Result],
STRING_AGG(OUN.[Note], ', ') WITHIN GROUP (ORDER BY OUN.outcomeKey) [Outcome Note]
FROM
Outcome AS OC
JOIN OutcomeNote AS OUN ON OUN.outcomeKey = OC.outcomeKey
GROUP BY
OUN.outcomeKey,
OC.outcome;
При использовании SQL Server 2017 или SQL Azure это может быть более подходящим выбором, поскольку он не только делает запрос более читабельным, но и устраняет использование (гораздо менее эффективных) XML-функций в вашем запросе.
В прошлом я тоже интенсивно использовал XML-функциональность для конкатенации полей (то, как вы ее используете), но я заметил значительное снижение производительности моих запросов (которые иногда содержали до 10 столбцов с объединенными данными). С тех пор я склоняюсь к рекурсивным общим табличным выражениям или скалярным UDF с рекурсивными подходами в средах, предшествующих SQL Server 2017.