IF OBJECT_ID('master..test') 不为 null 则删除表 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
我的表名是test,我使用For XML Path('')语法进行连接。
STUFF函数将一个字符串插入到另一个字符串中。它会删除第一个字符串中指定长度的字符,
然后在第一个字符串的起始位置插入第二个字符串。
STUFF函数的格式如下:STUFF (character_expression, start, length, character_expression)
character_expression是字符数据的表达式。character_expression可以是常量、变量或者是字符或二进制数据的列。
start是一个整数值,用于指定删除和插入的位置。如果start或length为负数,则返回空字符串。如果start大于第一个character_expression,则返回空字符串。start可以是bigint类型。
length是一个整数,用于指定要删除的字符数。如果length比第一个character_expression长,则删除操作会一直进行到最后一个character_expression中的最后一个字符。length可以是bigint类型。
GROUP_CONCAT
函数可能会将其输出悄悄截断到group_concat_max_len
。使用SET group_concat_max_len=...
命令可以帮助解决此问题,但最好还是检查返回的(字节?)长度是否小于group_concat_max_len
。 - tuomassalo