2011-05-29 53 views
32

可能重複:
Is there a way to create a SQL Server function to 「join」 multiple rows from a subquery into a single delimited field?什麼是TSQL上的String.Join的等價物?

大家好!

我正在尋找一種簡單的方法來連接'n'值。喜歡的東西:

SELECT MyConcat(',', T.TextColumn) 
FROM SomeTable AS T 
WHERE T.SomeOtherColumn = SomeCondition 

所以,如果我有一個表,如:

SomeTable: 
Id | TextColumn | SomeOtherColumn 
----+------------+---------------- 
1 | Qwerty  | Y 
2 | qwerty  | N 
3 | azerty  | N 
4 | Azerty  | Y 

這將導致類似:

SQL: 
SELECT MyConcat(';', T.TextColumn) 
FROM SomeTable AS T 
WHERE T.SomeOtherColumn = 'Y' 

RESULT: 
'Qwerty;Azerty' 
+0

我已經找到了解決方案通過創建以下功能: CREATE FUNCTION [dbo]。[JoinTexts] ( @deli斜切VARCHAR(20), @WhereClause VARCHAR(1) ) RETURNS VARCHAR(MAX) AS BEGIN DECLARE @Texts VARCHAR(MAX) SELECT @Texts = COALESCE(@Texts + @delimiter, '') + T.Texto FROM SomeTable AS T WHERE T.SomeOtherColumn = @WhereClause RETURN @Texts END GO 用法: SELECT dbo.JoinTexts( '', 'Y') – Gil 2011-05-30 15:14:11

回答

36

這應該做的伎倆:

DECLARE @Result VARCHAR(MAX); 

SELECT 
    @Result = CASE 
     WHEN @Result IS NULL 
     THEN T.TextColumn 
     ELSE @Result + ';' + T.TextColumn 
    END 
FROM 
    SomeTable AS T 
WHERE 
    T.SomeOtherColumn = 'Y'; 

SELECT @Result 
25
SELECT CAST(TextColumn + ';' AS VARCHAR(MAX)) 
FROM SomeTable 
WHERE SomeOtherColumn = 'Y' 
FOR XML PATH ('') 

如果你不喜歡尾隨;你可以從結果中刪除字符。


編輯在2017年

許多平臺現在支持窗口函數LISTAGG()

+0

它非常好 – 2015-11-11 11:23:22

相關問題