Оператор UNPIVOT стр. 1 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Как следует из названия оператора, UNPIVOT выполняет обратную по отношению к PIVOT операцию, т.е. представляет данные, записанные в строке таблицы, в одном столбце. В примере, рассмотренном в предыдущем параграфе, мы с помощью оператора PIVOT разворачивали в строку таблицу, полученную с помощью следующего запроса:
В результате было получено следующее представление:
Исходный результат мы можем получить, если применим к pivot-запросу unpivot-преобразование:
Заметим, что имя avg_ нельзя использовать в операторе UNPIVOT, поскольку оно уже использовалось в операторе PIVOT, поэтому я использовал новое имя avg__, которому затем присвоил алиас, чтобы полностью воссоздать результат, полученный с помощью группировки. Рассмотрим теперь более содержательный пример. Пусть требуется информацию о рейсе 1100 представить в следующем виде:
Поскольку информация из строки таблицы трансформируется в столбец, то напрашивается использование оператора UNPIVOT. Здесь следует сделать одно замечание. Значения в этом столбце должны быть одного типа. Поскольку в этот столбец в нашем примере собираются значения из разных столбцов исходной таблицы, то нужно преобразовать их к единому типу. Более того, должны совпадать не только типы, но и размер. Общим типом в нашем случае является строковый тип. Поскольку столбцы town_from и town_to уже имеют тип char(25), то приведем все к этому типу:
Здесь мы заодно преобразовали время вылета/прилета, убрав из него составляющую даты:
Остальное, я надеюсь, понятно из кода:
Столбец с именем spec используется для вывода названий параметров, а столбец info
содержит сами параметры. Результат выполнения запроса уже был представлен в условии
задачи.
|