Как перенести набор результатов из SQL - PullRequest
8 голосов
/ 09 августа 2011

Я использую 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.
  • В документации упоминаются <aggregation function> и <column being aggregated>, и я не хочу ничего агрегировать.

Заранее спасибо.

Ответы [ 3 ]

7 голосов
/ 10 августа 2011

Требуется использовать агрегатную функцию, если вы используете 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, или, другими словами: агрегатная функция становится тождественной функцией.

1 голос
/ 09 августа 2011

Посмотрите, если , это поможет вам начать. Раньше для этого приходилось использовать операторы CASE, но похоже, что некоторые признаки PIVOT теперь есть в SQL Server.

0 голосов
/ 10 августа 2011

PIVOT - это начало, но с SQL-запросами важно то, что вам действительно нужно знать, какие столбцы следует ожидать в наборе результатов до написания запроса.Если вы этого не знаете, в прошлый раз, когда я проверял, вам придется либо использовать динамический sql, либо позволить клиентскому приложению, которое извлекает данные, вместо этого делать сводку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...