2016-03-02 92 views
2

我是新編寫SQL腳本(至少比SELECT * FROM X多)。我遇到了一個問題,將一個表按一個值分組,然後將另一列中的值加入到單個字符串中。MS SQL - 由concat字符串組

我想在臨時表上執行一個組,然後將組中的列的值連接在一起。

表變量(編輯),@categoriesToAdd,數據結構是[SubscriberId int,CategoryId int]。

我所試圖做的是一樣的東西(我的理解是,CONCAT是位來自MSSQL丟失):然後

SELECT SubscriberId, 
     CONCAT(CONVERT(VARCHAR(10), CategoryId) + ', ') as categoriesAdded 
FROM @categoriesToAdd 
GROUP BY SubscriberId 

的每個用戶級聯類別ID會看起來像: 0001, 0002,0003,0004

謝謝!

+0

您搜索'GROUP_CONCAT(MySQL的)/ LISTAGG(甲骨文)/ string_agg(PostgreSQL系統)'相當於MS SQL Server的。我建議使用'STUFF + FOR XML'。更多的信息和比較** [在Transact-SQL中連接行值](https://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/)* * – lad2025

回答

2

在SQL Server中,你可以使用FOR XML PATH

select SubscriberId, 
categoriesAdded=Stuff((SELECT ',' + CAST(CategoryId as VARCHAR(255)) FROM catsToAdd t1 WHERE [email protected] 
FOR XML PATH ('')) 
      , 1, 1, '') 
from @categoriesToAdd as catsToAdd 
GROUP BY SubscriberId 
+0

@categoriesToAdd where語句「WHERE t1.SubscriberId = @ categoriesToAdd.SubscriberId」出現錯誤: 「必須聲明縮放變量」@categoriesToAdd'「 – Marek

+0

@Marek是一個臨時表還是一個表變量?因爲表變量在它們被定義的語句中有範圍。 – Mihai

+0

我宣佈它像 聲明@ categoriesToAdd表 \t(SubscriberId INT, 類別ID INT) 很抱歉,如果我問的問題錯了,我可以改變它! – Marek