我有一个表格,我将人口统计信息填入,然后使用动态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 :(得分:1)
看起来您正在使用SQL Server。如果您使用的是最新版本的SQL Server(例如,SQL Server 2005或更高版本),那么将数据存储为XML可能会更好。
这使您可以在SQL中使用XPATH / XQUERY来操作XML数据以获得您想要的内容。我想你会发现更容易做到。
答案 1 :(得分:0)
非常有帮助。我的代码可能会使用一些清理工具。