加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

如何从SQL转置结果集

发布时间:2020-12-12 06:35:37 所属栏目:MsSql教程 来源:网络整理
导读:我正在使用Microsoft SQL Server 2008. 我有一个看起来像这样的表: |======================================================|| RespondentId | QuestionId | AnswerValue | ColumnName | |======================================================|| P123
我正在使用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,或换句话说:聚合函数成为标识函数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读