我正在使用 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 来执行此操作?
Update
- 我什至不知道 PIVOT 是否是正确的方法。
- 我不知道要在哪一列上进行 PIVOT。
- 文档提到
<aggregation function>
and <column being aggregated>
我不想聚合任何东西。
提前致谢。
如果您使用,则需要使用聚合函数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
,或者换句话说:聚合函数成为恒等函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)