如何从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,或换句话说:聚合函数成为标识函数.

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03