小编典典

如何从SQL转置结果集

sql

我正在使用Microsoft SQL Server2008。
我有一个看起来像这样的表:

|======================================================|
| 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放在哪一列上。
  • 文档中提到<aggregation function><column being aggregated>并且我不想汇总任何内容。

提前致谢。


阅读 199

收藏
2021-04-22

共1个答案

小编典典

如果使用,则必须使用聚合函数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, TimesADay, SoapPrice)) AS pvt

如果一个组仅包含一行,则MIN(value) = value或换句话说:聚合函数成为恒等函数。

2021-04-22