Наша версия SQL Server не поддерживает STRING_AGG
из-за версии
Наши данные возвращаются вот так
введите сюда описание изображения
Но наше требование — отобразить это так:
введите сюда описание изображения
Я считаю, что этот код будет работать, если у нас будет такая функциональность:
SELECT
studentid,
STRING_AGG(code, ',') AS Codes
FROM
testtable
GROUP BY
studentid;
Любая помощь приветствуется.
Я попробовал это, используя ответы XML:
SELECT
studentid,code
= STUFF((
SELECT ',' + dbo.testtable .code
FROM dbo.testtable
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM dbo.testtable
GROUP BY StudentID
ORDER BY StudentID
Это возвращает это, что в некотором роде правильно, но мне нужно, чтобы оно прикрепляло только коды студентов, а не все коды в базе данных:
Вы не сопоставляете свой подзапрос со строкой внешнего запроса.
Можете ли вы опубликовать примеры данных и ожидаемый результат?
Вам не хватает корреляции в вашем подзапросе. например
SELECT
t1.studentid,
code = STUFF((
SELECT ',' + t2.code
FROM dbo.testtable AS t2
WHERE t2.studentid = t1.studentid -- Need this part
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM dbo.testtable AS t1
GROUP BY t1.StudentID
ORDER BY StudentID;
value('text()[1]',
немного быстрее, чем value('.',
Спасибо, Гарет, а также прошу прощения за мое несоблюдение правил, Дейл К.
В соответствии с руководством по вопросам не публикуйте изображения кода, данных, сообщений об ошибках и т. д. — скопируйте или введите текст в вопрос. Пожалуйста, ограничьте использование изображений для диаграмм или демонстрации ошибок рендеринга, вещей, которые невозможно точно описать с помощью текста.