2014-11-05 247 views
1

我在另一個大查詢中使用此查詢。 我需要這個查詢返回comman分隔值(所以約翰,大衛,布賴恩,傑克),而不使用任何中間變量。SQL逗號分隔值

我正在使用SQL Server 2014.

您能否提供必要的SQL?

SELECT 
    [email protected] = (COALESCE(@listStr + ',', '') + ShortName) 
X.ShortName 
FROM 
    (
    SELECT 'John' AS ShortName UNION ALL 
    SELECT 'David' AS ShortName UNION ALL 
    SELECT 'Brian' AS ShortName UNION ALL 
    SELECT 'Jake' AS ShortName 
    ) X 
+1

你用什麼數據庫? – 2014-11-05 22:04:03

+0

我正在使用SQL Server 2014 – GreenBinary 2014-11-05 22:05:53

+0

SQL是您唯一的選擇,還是可以連接應用程序/報告圖層中的結果 - 我只問,因爲我討厭當前可用的方式(遊標,'STUFF' /'FOR XML'等等),因爲它們要麼太複雜,要麼執行得不好。在應用程序或報告中完成更簡單。 – 2014-11-05 22:11:55

回答

0

可以使用STUFF功能,FOR XML PATH可以用來連接與逗號值分隔和東西刪除前導逗號。

SELECT STUFF((SELECT ',' + ShortName 
    FROM 
    (
    SELECT 'John' AS ShortName UNION ALL 
    SELECT 'David' AS ShortName UNION ALL 
    SELECT 'Brian' AS ShortName UNION ALL 
    SELECT 'Jake' AS ShortName 
    ) X 
    FOR XML PATH('')),1,1,'') 
+0

「使用'STUFF'函數」是一個總體簡化這種複雜的方法。你能解釋_how_這是否有效? – 2014-11-05 22:10:51

+0

@DStanley,很好,我看到OP很熟悉SQL,但是會記住,因爲它對其他人很有用。 – radar 2014-11-05 22:24:35