2014-01-06 85 views
0

我正在寫一個函數,它返回一個varchar中子表的一列值的名稱。SQL如何將select語句的值添加到varchar

關係是: 我有一個父表叫Activity。 和一張與表Activity的N-1關係的子表,名爲ActivityObjective。 和第三張表,我保留目標的名稱,稱爲Objective

這是我所做的查詢。這將返回的特定Activity目標的名字與ActivityID = @ActivityID

SELECT  o.ObjectiveName  
FROM  Activity a  
INNER JOIN ActivityObjective ao ON a.ActivityID = ao.ActivityID  
INNER JOIN Objective o ON o.ObjectiveID = ao.ObjectiveID  
WHERE  a.ActivityID = @ActivityID 

這將返回類似:

ObjectiveName 
|-------------------| 
    objName1 
    objName2 
    objName3 

我的目標是不會有一個varchar 「objName1,objName2,objName3」。我無法創建臨時表,因爲我在一個函數中工作。

+1

看到這個例子http://stackoverflow.com/questions/5196371/sql-query-concatenating -results into one-string – StackTrace

+0

Google for [sqlserver group_concat](https://duckduckgo.com/?q=sqlserver+group_concat)。成爲第1000萬位開發人員,想知道爲什麼微軟如此努力。 – Andomar

回答

0

您將需要調整以下以匹配您特別想要的,但這是一個開始:

Select substring((
    SELECT (', ' + o.ObjectiveName) 
    FROM  Activity a  
    INNER JOIN ActivityObjective ao ON a.ActivityID = ao.ActivityID  
    INNER JOIN Objective o ON o.ObjectiveID = ao.ObjectiveID  
    WHERE  a.ActivityID = @ActivityID 
    FOR XML PATH('') 
), 3, 1000)