我正在尝试编写一个创建数据透视表的 sql 语句。
数据是调查响应列表,由涉及表响应者、响应和答案的连接查询组成。答案表结构如下:
______________________________________________________________
|AnswerID|ResponseID|QuestionID|AnswerComment |
| 1 | 1 | 1 |This is answer 1 |
| 2 | 1 | 2 |This is answer 2 |
| 3 | 1 | 3 |This is answer 3 |
| 4 | 2 | 1 |Answer 1 Respondent 2 |
| 5 | 2 | 3 |Resp 2, No Q.2 |
| 6 | 3 | 2 |I answered Q.2 only |
|____________________________________________________________|
答主长这样:
______________________________________________________________
|RespondentID|GivenName|Surname|age, gender, blah blah |
|____________________________________________________________|
回复:
______________________________________________________________
|ResponseID|ResponseDate|RespondentID|Attachment |
|____________________________________________________________|
和问题:
_____________________________________________________
|QuestionID|QuestionNumber|QuestionText| |
|___________________________________________________|
我希望我的输出形式为:
________________________________________________________________________________________
|RespondentInfo|ResponseDate|1 |2 |3 |
|Respondent 1 |15/10/2012 |This is answer 1 |This is answer 2 |This is answer 3|
|Respondent 2 |17/10/2012 |Answer 1 Respondent 2 | |Resp 2, No Q.2 |
|Respondent 3 |19/10/2012 | |I answered Q.2 only| |
|______________________________________________________________________________________|
我希望每个受访者在对应列中的每个答案都有一行。我创建的查询 - 尽管它将答案旋转到正确的列 - 为每个答案提供了一个新行,所有空白列都为空。
我的 sql:
SELECT Respondent, ResponseDate,
[1], [2], [3]
FROM (
SELECT Respondent.Surname + ', ' + FirstName as RespondentInfo,
Response.ResponseDate,
isnull(Answer.AnswerComment, '') as Answer,
Qustion.QuestionNumber
FROM Answer INNER JOIN
Question ON Answer.QuestionID = Question.QuestionID INNER JOIN
Response ON Answer.ResponseID = Response.ResponseID INNER JOIN
Respondent ON Response.RespondentID = Respondent.RespondentID
) as ResponseQuery
PIVOT (
max(Answer)
FOR ResponseQuery.QuestionNumber in ([1], [2], [3])
) AS OutputTable
我认为问题是因为我没有使用聚合函数,所以默认为 max()。谁能指出我正确的方向。
抱歉,如果我的问题过于冗长。