SQL Azure 字串高效連接方案
在SQL Azure中,有效率地將分散的字串資料聚合為單一實體至關重要。由於SQL Azure中缺乏CLR自訂聚合函數,因此需要尋找高效率的替代方案。
Transact SQL解決方案
一種高效的方法是使用WITH子句和遞歸CTE(公共表表達式)。此方法包括:
說明
請考慮以下查詢:
<code class="language-sql">;WITH Partitioned AS ( SELECT ID, Name, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name) AS NameNumber, COUNT(*) OVER (PARTITION BY ID) AS NameCount FROM dbo.SourceTable ), Concatenated AS ( SELECT ID, CAST(Name AS nvarchar(max)) AS FullName, Name, NameNumber, NameCount FROM Partitioned WHERE NameNumber = 1 UNION ALL SELECT P.ID, CAST(C.FullName + ', ' + P.Name AS nvarchar(max)), P.Name, P.NameNumber, P.NameCount FROM Partitioned AS P INNER JOIN Concatenated AS C ON P.ID = C.ID AND P.NameNumber = C.NameNumber + 1 ) SELECT ID, FullName FROM Concatenated WHERE NameNumber = NameCount;</code>
範例
對於以下數據:
<code>ID Name ------- -------- 1 Matt 1 Rocks 2 Stylus 3 Foo 3 Bar 3 Baz</code>
傳回以下聚合結果:
<code>ID FullName ------- --------------------- 1 Matt, Rocks 2 Stylus 3 Foo, Bar, Baz</code>
優點
注意:為了避免nvarchar資料型別長度溢出,將CAST的型別修改為nvarchar(max)。 另外,範例結果中的排序與原文略有不同,這是因為ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name) 的排序依據是Name字段,導致了排序結果的差異。 如果需要特定的排序方式,請修改ORDER BY子句。
以上是如何在不使用 CLR 聚合函數的情況下在 SQL Azure 中最佳地連接字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!