Ето как работи:
1. Вземете низ от XML елемент с ЗА XMLа
Добавянето на FOR XML PATH в края на заявка ви позволява да изведете резултатите от заявката като XML елементи, като името на елемента се съдържа в аргумента PATH. Например, ако трябва да изпълним следния оператор:
SELECT ',' + name
FROM temp1
FOR XML PATH ('')
Чрез предаване на празен низ (ЗА XML PATH('')), вместо това получаваме следното:
,aaa,bbb,ccc,ddd,eee
2. Премахнете водещата запетая с STUFF
Инструкцията STUFF буквално "пълва" един низ в друг, като заменя знаците в първия низ. Ние обаче го използваме просто, за да премахнем първия знак от получения списък със стойности.
SELECT abc = STUFF((
SELECT ',' + NAME
FROM temp1
FOR XML PATH('')
), 1, 1, '')
FROM temp1
Параметрите на STUFF
са:
- Низът, който трябва да бъде „напълнен“ (в нашия случай пълният списък с имена със запетая)
- Мястото, където да започнете да изтривате и вмъквате знаци (1, ние пъхнем в празен низ)
- Броят знаци за изтриване (1, като водеща запетая)
Така че завършваме с:
aaa,bbb,ccc,ddd,eee
3. Присъединете се към id, за да получите пълен списък
След това просто присъединяваме това към списъка с идентификатори във временната таблица, за да получим списък с идентификатори с име:
SELECT ID, abc = STUFF(
(SELECT ',' + name
FROM temp1 t1
WHERE t1.id = t2.id
FOR XML PATH (''))
, 1, 1, '') from temp1 t2
group by id;
И имаме нашия резултат:
Надявам се това да помогне!