2011-05-29 30 views
32

Olası Çoğalt:
Is there a way to create a SQL Server function to “join” multiple rows from a subquery into a single delimited field?TSQL'de String.Join eşdeğeri nedir?

Merhaba tüm!

'n' değerlerini birleştirmenin kolay bir yolunu arıyorum. Bir şey gibi: Izleyen beğenmezseniz

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

RESULT: 
'Qwerty;Azerty' 
+0

aşağıdaki oluşturarak bir çözüm bulduk işlevi: FONKSİYONU OLUŞTUR [dbo]. [JoinTexts] ( @deli gönye VARCHAR (20), @whereClause VARCHAR (1) )) '' VARCHAR (MAX) AS) @Texts VARCHAR (MAX BEYAN SEC @Texts = BIRLEŞIM (@Texts + @delimiter BEGIN İade + T.Texto sometable DAN T gibi olduğu T.SomeOtherColumn = @whereClause DÖNÜŞ @Texts END GO Kullanım: SEC dbo.JoinTexts ('', 'Y') – Gil

cevap

36

Bu hile yapmak gerekir desteklemek 2017 YILINDA DÜZENLEME:

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 ('') 

: Bu gibi bir şey neden olacaktır

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

: Yani

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

ben varsa böyle bir tablo ; karakterini sonuçtan kaldırabilirsiniz.


Birçok platformlar artık pencere açma fonksiyonu LISTAGG()

+0

çok iyi çalışır –

İlgili konular