IF OBJECT_ID('master..test') is not null Drop table test
CREATE TABLE test (ID INTEGER, NAME VARCHAR (50), VALUE INTEGER );
INSERT INTO test VALUES (1, 'A', 4);
INSERT INTO test VALUES (1, 'A', 5);
INSERT INTO test VALUES (1, 'B', 8);
INSERT INTO test VALUES (2, 'C', 9);
select distinct NAME , LIST = Replace(Replace(Stuff((select ',', +Value from test where name = _a.name for xml path('')), 1,1,''),'<Value>', ''),'</Value>','') from test _a order by 1 desc
ชื่อตารางของฉันคือการทดสอบและสำหรับการต่อกันฉันใช้ไวยากรณ์สำหรับเส้นทาง XML ('') ฟังก์ชัน stuff จะแทรกสตริงลงในสตริงอื่น จะลบความยาวที่ระบุของอักขระในสตริงแรกที่ตำแหน่งเริ่มต้นจากนั้นแทรกสตริงที่สองลงในสตริงแรกที่ตำแหน่งเริ่มต้น
ฟังก์ชัน STUFF มีลักษณะดังนี้: STUFF (character_expression, start, length, character_expression)
character_expression คือนิพจน์ของข้อมูลอักขระ character_expression สามารถเป็นค่าคงที่ตัวแปรหรือคอลัมน์ของอักขระหรือข้อมูลไบนารี
start เป็นค่าจำนวนเต็มที่ระบุตำแหน่งที่จะเริ่มการลบและการแทรก ถ้าค่าเริ่มต้นหรือความยาวเป็นลบสตริง null จะถูกส่งกลับ ถ้า start ยาวกว่า character_expression ตัวแรกสตริง null จะถูกส่งกลับ start อาจเป็นประเภท bigint
length คือจำนวนเต็มที่ระบุจำนวนอักขระที่จะลบ ถ้าความยาวยาวกว่า character_expression ตัวแรกการลบจะเกิดขึ้นกับอักขระตัวสุดท้ายใน character_expression สุดท้าย ความยาวอาจเป็นประเภท bigint