2012-08-23 108 views
1

我有一張表,我填充人口統計信息,然後使用動態sql來建立一個表。人口統計信息來自調查,一些調查有複選框。通過複選框,人們可以選擇多個值。複合加入與合併

所以我需要輸入所有選項作爲逗號分隔列表。

CREATE TABLE Demographics 
    (
    QID NVARCHAR(15) 
    ,userid NVARCHAR(50) 
    ,question NVARCHAR(800) 
    ,choice NVARCHAR(1000) 
) 
... 
... 
--Demographics(QID,userid,question,choice) 
--'Insert checkbox (type 5) 
INSERT INTO Demographics 
SELECT CAST(q.QID AS NVARCHAR(15)) 
    ,ri.userid 
    ,q.QuestionText 
    ,ac.Choice 
FROM ResponseInfo ri --response details 
JOIN Responses r ON ri.ResponseID = r.ResponseID --actual response 
JOIN Questions q ON r.QID = q.QID --question info 
JOIN AnswerChoices ac ON r.QID = ac.QID --answer choice text 
WHERE (q.QuestionTypeID = 5 AND q.QID = ac.QID 
AND r.IsOther = 0 
AND q.QID = 16 
) 
AND ri.userid IN (SELECT userid FROM @Users) AND r.Response = ac.Sequence 
ORDER BY ri.userid 
... 
dynamic sql stuff 
... 
EXEC sp_exesql @sql 

我的結果是這樣的:

users | question_15 | choice_15 | question_16  | choice_16 | 
bill | age?  | 37  | favorite color? | red  | 
bill | age?  | 37  | favorite color? | green  | 

但它需要:

users | question_15 | choice_15 | question_16  | choice_16 | 
bill | age?  | 37  | favorite color? | red,green |  

我試圖做

,COALESCE(ac.Choice + ',','') + ac.Choice 

它給了我

bill | age?  | 37  | favorite color? | red,red | 

任何人都可以幫我解決這個問題嗎?

+0

「choice_16」有多少可能的值? – arunmoezhi

+0

在這種情況下,我認爲8。它是其中之一「你是西班牙人還是不是?」哦,無論哪種方式「點擊適用於你的每個種族」。 「拒絕回答」總是一個選擇。 – gooddadmike

回答

1

它看起來像你正在使用SQL Server。如果您使用的是最新版本的SQL Server(例如,SQL Server 2005或更高版本),則最好將數據存儲爲XML。

可讓您在SQL中使用XPATH/XQUERY來操縱XML數據以獲取所需內容。我想你會發現更容易做到。

+0

我正在使用2005年。 – gooddadmike