9

我找到了一种将多行组合成以逗号分隔的一行的方法,但现在我想删除最后一个逗号。

CREATE TABLE supportContacts 
(
   id int identity primary key, 
   type varchar(20), 
   details varchar(30)
);

INSERT INTO supportContacts (type, details)
VALUES ('Email', 'admin@sqlfiddle.com'),
       ('Twitter', '@sqlfiddle');

此查询结合了类型,但我现在想删除最后一个逗号:

SELECT top (2) 
    type + ', ' AS 'data()'
FROM  
    supportContacts
ORDER BY 
    type DESC
FOR XML PATH('')

这是当前的结果:

Twitter, Email,
4

3 回答 3

20

虽然您已经有了答案,但您会看到的另一个常见习语是:

select stuff((
    SELECT top (2) 
        ', ' type AS 'data()'
    FROM  
        supportContacts
    ORDER BY 
        type DESC
    FOR XML PATH('')
), 1, 2, '')

这表示“获取选择的结果并将从位置 1 开始的两个字符替换为长度为零的字符串”。

于 2014-10-30T12:24:41.327 回答
7

这对我有用->

1.在数据前插入逗号

2.使用东西删除它

select (stuff((
   SELECT ', '+ Name  AS 'data()' 
   FROM Table_1 
   FOR XML PATH('')),
   Count('ID')
, 1, ' '))as Result
于 2017-08-17T07:24:13.177 回答
3
declare  @BigStrRes8K nvarchar(4000) 

SELECT @BigStrRes8K = ( SELECT top (2) [type] + ', ' AS 'data()'
FROM supportContacts 
ORDER BY type DESC
FOR XML PATH('') ) 

SELECT LEFT(RTRIM(@BigStrRes8K), ( LEN(RTRIM(@BigStrRes8K))) - 1) as FinalNoComma

在我控制渲染代码的情况下,我永远不会这样做。我会教调用者处理结尾的逗号。您还必须允许空值和 SQL 行的 4K 或 8K 限制

于 2014-10-30T04:51:09.047 回答