如何从SQL转置结果集

前端之家收集整理的这篇文章主要介绍了如何从SQL转置结果集前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Microsoft sql Server 2008.
我有一个看起来像这样的表:
|======================================================|
| RespondentId | QuestionId | AnswerValue | ColumnName | 
|======================================================|
|     P123     |      1     |     Y       | CanBathe   |
|------------------------------------------------------|
|     P123     |      2     |     3       | TimesADay  |
|------------------------------------------------------|
|     P123     |      3     |     1.00    | SoapPrice  |
|------------------------------------------------------|
|     P465     |      1     |     Y       | CanBathe   |
|------------------------------------------------------|
|     P465     |      2     |     1       | TimesADay  |
|------------------------------------------------------|
|     P465     |      3     |     0.99    | SoapPrice  |
|------------------------------------------------------|
|     P901     |      1     |     N       | CanBathe   |
|------------------------------------------------------|
|     P901     |      2     |     0       | TimesADay  |
|------------------------------------------------------|
|     P901     |      3     |     0.00    | SoapPrice  |
|------------------------------------------------------|

我想将行翻转为列,以便此表如下所示:

|=================================================|
| RespondentId | CanBathe | TimesADay | SoapPrice | 
|=================================================|
|     P123     |     Y    |      3    |   1.00    | 
|-------------------------------------------------|
|     P465     |     Y    |      1    |   0.99    | 
|-------------------------------------------------|
|     P901     |     N    |      0    |   0.00    | 
|-------------------------------------------------|

(这里的示例数据是任意组成的,所以很傻)

源表是一个临时表,大约有70,000行.
我需要写什么sql才能做到这一点?

更新

>我甚至不知道PIVOT是否是正确的选择.
>我不知道PIVOT上的哪一列.
>文档提及<聚合功能>和<列聚合>而且我不想聚合任何东西.

提前致谢.

解决方法

如果您使用PIVOT,则需要使用聚合函数.但是,由于您的(RespondentId,QuestionId)组合是唯一的,因此您的“组”将只有一行,因此您可以使用MIN()作为聚合函数
SELECT RespondentId,CanBathe,TimesADay,SoapPrice
FROM (SELECT RespondentId,ColumnName,AnswerValue FROM MyTable) AS src
PIVOT (MIN(AnswerValue) FOR ColumnName IN(CanBathe,SoapPrice)) AS pvt

如果一个组只包含一行,则MIN(value)= value,或换句话说:聚合函数成为标识函数.

猜你在找的MsSQL相关文章