2012-06-03 49 views
5

可能重複:
Concatenate many rows into a single text string?選擇多個SQL行成一排

假設我有表名爲tblContractMail。下面給出的數據樣本表:

enter image description here

我需要編寫產生以下輸出一個SQL查詢:

[email protected]; [email protected];赫爾辛基@ akij.net」

我知道兩種可能性:

DECLARE @str varchar(4000) 
SELECT @str = COALESCE(@str + ';', '') + strContract FROM tblContractMail 
SELECT @str 

和:

DECLARE @str varchar(4000) 
SET @str = (SELECT strContract + ';' FROM tblContractMail FOR XML PATH('')) 
SET @str = SUBSTRING(@str, 1, LEN(@str)-1) 
SELECT @str 

有沒有什麼辦法讓在單一查詢(我指的是出聲明的變量)這個輸出?

+0

請參閱此。 http://stackoverflow.com/questions/194852/concatenate-many-rows-into-a-single-text-string –

+0

是的,這個問題已被重複無數次。 –

+0

@PeterMajeed:沒錯,雖然從未被問過這種特殊的形式。 –

回答

5

第一種方法依賴於變量,因此第一種方法的答案是

但是你可以很容易地使用第二種方式沒有變,只是你需要稍微修改:

SELECT 
    SUBSTRING(
    (SELECT ';' + strContract FROM tblContractMail FOR XML PATH('')), 
    2, 
    2147483647 
) 

正如你所看到的,分離項目之前去。因此,您開始從第二個字符開始剪切字符串,省略前導分號。長度說明符不一定是長度減1,你可以指定任何相當大的數字,函數將返回從第二個字符到結束的所有內容。在這種情況下,已經指定了最大值int

+0

嗨@安德里謝謝 – yeasir007