9

複数の行をコンマで区切られた 1 つの行に結合する方法を見つけましたが、最後のコンマを削除したいと思います。

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 から始まる 2 つの文字を長さ 0 の文字列に置き換える」ことを意味します。

于 2014-10-30T12:24:41.327 に答える
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 に答える