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
tên bảng của tôi là kiểm tra, và cho bởi ghép tôi sử dụng Đối với XML Path ('') cú pháp. Hàm thứ sẽ chèn một chuỗi vào một chuỗi khác. Nó xóa một chiều dài ký tự được chỉ định trong chuỗi đầu tiên ở vị trí bắt đầu và sau đó chèn chuỗi thứ hai vào chuỗi đầu tiên ở vị trí bắt đầu.
chức năng STUFF trông như thế này: STUFF (character_expression, bắt đầu, chiều dài, character_expression)
character_expression là một biểu hiện của dữ liệu ký tự. character_expression có thể là hằng số, biến hoặc cột của dữ liệu ký tự hoặc dữ liệu nhị phân .
bắt đầu Là giá trị số nguyên chỉ định vị trí để bắt đầu xóa và chèn. Nếu bắt đầu hoặc độ dài là số âm, một chuỗi rỗng được trả về. Nếu bắt đầu dài hơn ký tự đầu tiên, chuỗi rỗng được trả về. bắt đầu có thể thuộc loại bigint.
chiều dài Là số nguyên chỉ định số ký tự cần xóa. Nếu độ dài dài hơn ký tự đầu tiên, thì việc xóa sẽ xảy ra với ký tự cuối cùng trong ký tự cuối cùng. chiều dài có thể là loại bigint.
Điều này không đưa ra những gì Biswa yêu cầu. – eisberg
cảm ơn bạn sami đây là những gì tôi đang yêu cầu @biswa – Biswa
Tôi nghĩ rằng điều quan trọng là cảnh báo cho mọi người rằng chỉ sử dụng một loại máy tách có thể là bất lợi. Tôi đề nghị tạo dấu tách "tên" làm dấu chấm phẩy (;), và dấu tách giá trị có thể vẫn là dấu phẩy (,) –