1
我有一个表Survey_Data_Response用两个表中的“insert into”语句填充 - Survey_Question和Survey_Response,它们连接在QuestionID上。存储过程使用临时表创建数据透视表
我想使用SP来调整Survey_Data_Response表并将结果保存到临时表,以便我可以查询它来开发报表。
Survey_Data_Response表具有字段 - QuestionID,ResponseID,Question,Response,ResponseDateTime,moduleID。
问题的数量可能因调查而异。
QuestionID Question Response ResponseDateTime ResponseID ModuleID
123 Age 34 2011-06-06 18:21:00 ABC 123
345 Gender M 2011-06-06 18:21:00 DEF 123
567 Phone 444-4444 2011-06-06 18:21:00 HIG 123
123 Age 23 2011-06-07 12:01:00 MNO 123
789 Postal Code 90988 2011-06-07 12:01:00 XYZ 123
我需要将表转换为类似于这样的形式,问题以列和适当字段中的响应形式显示。
ResponseID Age Gender Phone Postal Code ResponsDateTime
ABC 34 M 444-4444 2011-06-06 18:21:00
XYZ 23 90988 2011-06-07 12:01:00
我已经在过去的2天里尝试了很多数据透视查询,但一直没有任何运气。这是我所在的位置,它返回列标题,但对问题的回答没有被填充。
DECLARE @cols VARCHAR(1000)
DECLARE @sqlquery VARCHAR(2000)
SELECT @cols = STUFF((SELECT distinct ',' + QuoteName(question)
FROM temp_SURVEY_DATA FOR XML PATH('')), 1, 1, '')
SET @sqlquery = 'SELECT * FROM
(SELECT DynamicQuestionResponseID,question,moduleid
FROM temp_SURVEY_DATA) base
PIVOT (max(moduleid) FOR question
IN (' + @cols + ')) AS finalpivot'
EXECUTE (@sqlquery)
有人能帮我理解为什么这个Pivot不工作,以及如何使它工作?
感谢
面临的挑战是,问题是动态的,他们改变每个调查(每次调查都有一个不同的模块)。我提供的查询将为每个问题创建列,我如何在每个问题下获得适当的答案?我感谢您的帮助。 – Stan 2012-04-06 22:14:46
这将动态地获取问题列表并将其转换为列标题,并且响应将与每个问题相关联。如果您在上面的测试中添加其他信息,您会看到正确的答案转到正确的问题 – Taryn 2012-04-06 22:25:56
是的,我现在看到它。谢谢bluefeet。我意识到我提供了一些错误信息,responseID对于每个响应都是不同的。这就是为什么我没有得到我期望的结果。感谢您帮助我找到答案。任何建议如何改变查询。我一直在玩弄它,并继续陷入错误。我会更新开幕评论。 – Stan 2012-04-06 23:16:56