How to Transpose a resultset from SQL

Viewed 9923

I am using Microsoft SQL Server 2008.
I have a table that looks something like this:

|======================================================|
| 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  |
|------------------------------------------------------|

I would like to flip the rows to be columns so that this table looks like this:

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

(the example data here is arbitrarily made up, so its silly)

The source table is a temp table with approximately 70,000 rows.
What SQL would I need to write to do this?

Update

  • I don't even know if PIVOT is the right way to go.
  • I don't know what column to PIVOT on.
  • The documentation mentions <aggregation function> and <column being aggregated> and I don't want to aggregate anything.

Thanks in advance.

3 Answers
Related