SQL或MSEXCEL将数据从行转换为列NOT PIVOT或TRANSFORM

时间:2013-11-08 19:18:07

标签: sql sql-server excel pivot transform

我正在尝试使用transpose / pivot(SQL Server 2008),但MAX函数和TRANSFORM都不适用于我。有没有办法以不同的方式实现这一目标,或者使用MSEXCEL?

这就是我所拥有的

`

<table>
<tr><td>Name</td><td>Question</td><td>Answer</td></tr>
<tr><td>Respondent 1</td><td>Question 1</td><td>Answer</td></tr>
<tr><td>Respondent 1</td><td>Question 2</td><td>Answer</td></tr>
<tr><td>Respondent 1</td><td>Question 3</td><td>Answer</td></tr>
<tr><td>Respondent 1</td><td>Question 4</td><td>Answer</td></tr>
<tr><td>Respondent 1</td><td>Question 5</td><td>Answer</td></tr>
<tr><td>Respondent 2</td><td>Question 1</td><td>Answer</td></tr>
<tr><td>Respondent 2</td><td>Question 2</td><td>Answer</td></tr>
<tr><td>Respondent 2</td><td>Question 3</td><td>Answer</td></tr>
<tr><td>Respondent 2</td><td>Question 4</td><td>Answer</td></tr>
<tr><td>Respondent 2</td><td>Question 5</td><td>Answer</td></tr>
<tr><td>Respondent 3</td><td>Question 1</td><td>Answer</td></tr>
<tr><td>Respondent 3</td><td>Question 2</td><td>Answer</td></tr>
<tr><td>Respondent 3</td><td>Question 3</td><td>Answer</td></tr>
<tr><td>Respondent 3</td><td>Question 4</td><td>Answer</td></tr>
<tr><td>Respondent 3</td><td>Question 5</td><td>Answer</td></tr>
<tr><td></td></tr>
</table>

`

我想最终得到以下内容:

`

<table>
<tr><td>Name</td><td>Question 1</td><td>Question 2</td><td>Question 3</td><td>Question 4</td><td>Question 5</td></tr>
<tr><td>Respondent 1</td><td>text</td><td>text</td><td>text</td><td>text</td><td>text</td></tr>
<tr><td>Respondent 2</td><td>text</td><td>text</td><td>text</td><td>text</td><td>text</td></tr>
<tr><td>Respondent 3</td><td>text</td><td>text</td><td>text</td><td>text</td><td>text</td></tr>
</table>

`

这是我尝试过但未通过的查询: 选择 答辩, MAX(问题='问题1'然后回答ELSE NULL END)AS'问题1', MAX(问题='问题2'然后回答错误结束时的情况)AS'问题2' 从表 GROUP BY被投诉人

我认为Excel可能是最好的解决方案,任何想法?

1 个答案:

答案 0 :(得分:1)

您可以在sql中使用数据透视表:

Select * from tablename
Pivot( max(Answer) for Question in ([Question1], [Question2],[Question3],[Question4],[Question5])) as pivotTable