Альтернатива STRING_AGG

Наша версия 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

Это возвращает это, что в некотором роде правильно, но мне нужно, чтобы оно прикрепляло только коды студентов, а не все коды в базе данных:

обновленные результаты

В соответствии с руководством по вопросам не публикуйте изображения кода, данных, сообщений об ошибках и т. д. — скопируйте или введите текст в вопрос. Пожалуйста, ограничьте использование изображений для диаграмм или демонстрации ошибок рендеринга, вещей, которые невозможно точно описать с помощью текста.

Dale K 11.07.2024 12:42

Вы не сопоставляете свой подзапрос со строкой внешнего запроса.

Dale K 11.07.2024 12:44

Можете ли вы опубликовать примеры данных и ожидаемый результат?

GuidoG 11.07.2024 12:46
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам не хватает корреляции в вашем подзапросе. например

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;

Пример на db<>fiddle

value('text()[1]', немного быстрее, чем value('.',
Charlieface 11.07.2024 12:54

Спасибо, Гарет, а также прошу прощения за мое несоблюдение правил, Дейл К.

D B 11.07.2024 14:46

Другие вопросы по теме