Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 复结合_Sql_Sql Server 2005_Join_Coalesce - Fatal编程技术网

Sql 复结合

Sql 复结合,sql,sql-server-2005,join,coalesce,Sql,Sql Server 2005,Join,Coalesce,我有一个表,我正在填充人口统计信息,然后使用动态sql从中构建一个表。人口统计信息来自调查,一些调查有复选框。通过复选框,人们可以选择多个值 因此,我需要以逗号分隔的列表形式输入所有选项 CREATE TABLE Demographics ( QID NVARCHAR(15) ,userid NVARCHAR(50) ,question NVARCHAR(800) ,choice NVARCHAR(1000) ) ... ... --Demographi

我有一个表,我正在填充人口统计信息,然后使用动态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   |

有人能帮我解决这个问题吗?

看起来您正在使用SQL Server。如果您使用的是最新版本的SQL Server(例如SQL Server 2005或更高版本),那么最好将数据存储为XML

这使您可以在SQL中使用XPATH/XQUERY操作XML数据以获得所需内容。我想你会发现这更容易做到


看起来您正在使用SQL Server。如果您使用的是最新版本的SQL Server(例如SQL Server 2005或更高版本),那么最好将数据存储为XML

这使您可以在SQL中使用XPATH/XQUERY操作XML数据以获得所需内容。我想你会发现这更容易做到

非常有用。我的代码可能需要一些清理。


非常有用。我的代码可能需要一些清理。

对于
choice\u 16
,有多少可能的值?在这种情况下,我认为是8。这是一个“你到底是不是西班牙裔?”哦,不管怎样,“点击每一个适用于你的种族”。“拒绝回答”始终是一种选择。对于
choice\u 16
,有多少可能的值?在这种情况下,我认为是8。这是一个“你到底是不是西班牙裔?”哦,不管怎样,“点击每一个适用于你的种族”。“拒绝回答”永远是一种选择。