Как с помощью Pivot агрегировать информацию из множества столбцов?
Иногда в практике можно столкнуться с задачей, когда необходимо получить выгрузку, которая содержит в себе агрегирующую (сводную) информацию по какому-то объекту (сотруднику, клиенту, счету, карте). Для реализации такого подхода можно использовать оператор pivot в T-SQL, который разворачивает столбец в строку, преобразуя уникальные значения этого столбца в несколько выходных столбцов.
Применение данного оператора описывается в документации на примере одного столбца, но что делать, если количество столбцов для разворота больше одного. В данной статье хотелось бы рассмотреть, как раз такой случай.
Создадим демонстрационную таблицу со списком клиентов и его предложений:
Необходимо получить сводную таблицу по клиенту, для этого дополнительно создадим точки поворота (столбцы number_product_id, number_product_name, number_sales).
Добавим в запрос оператор разворота Pivot по каждому из столбцов number_product_id, number_product_name, number_sales.
Рассмотрим синтаксис Pivot на примере одного из столбцов:
- Client— столбец, по которому мы будем осуществлять группировку
- MAX(product_id)— агрегатная функция по столбцу product_id, в нашем случае не играет какой-либо роли, но необходимо ее указание согласно синтаксису оператора;
- FORnumber_product_idin([i_product_id1], [i_product_id2, [i_product_id3])— указание колонки со значениями, которые будут выступать в качестве названия результирующих столбцов
- AS pivot_id— обязательный псевдоним.
Результат немного отличается от того, который мы ожидали получить — результаты агрегации выводятся не только в разных колонках, но и в разных строках. Чтобы «схлопнуть» данную выборку, необходимо произвести группировку по столбцам, которые не были результирующими оператора Pivot, в нашем случае это столбец Client.
Теперь результат соответствует поставленной задаче.
Также можно динамически формировать строку запроса, чтоб не перечислять результирующие столбцы Pivot, и выполнять эту сроку через команду Execute.
Использование оператора Pivot существенно облегчает жизнь, но не стоит забывать, что существуют и другие способы, с помощью которых можно получить аналогичный результат, и выбор должен происходить в зависимости от характера поставленной задачи и влияние выбранного способа на общую производительность.
В качестве основы для написания статьи использовалась публикация PIVOT on two or more fields in SQL Server, альтернативный способ использования Pivot для множества столбцов, описан здесь.
Госдеп и Минфин готовят предложение по снятию санкций с отдельных юрлиц и физлиц. С кого именно — неизвестно.
Как отмечают аналитики, эффект от новостей о включении некоторых монет в крипторезерв США не мог продлиться долго.
Обменный сервис Carlos-Exchange ваш надежный партнер в сфере обмена криптовалют.
Представляем вашему вниманию наш обменный сервис, который предлагает вам невероятные преимущества.
🔹 Во-первых, это быстрые транзакции. Мы гарантируем, что обмены криптовалюты будут проведены мгновенно, что позволит вам сразу воспользоваться полученными средствами в нуж…
Собираем новости, события и мнения о рынках, банках и реакциях компаний.
Также суд на четыре года запретил ей заниматься коммерческои деятельностью и удовлетворил гражданский иск на 587 млн рублей.
Когда бренд одежды хочет масштабировать производство, первая мысль чаще всего — обратиться в Китай. Однако на фоне возросших цен на пошив в Китае все более привлекательным вариантом становится Индия — один из крупнейших мировых экспортеров одежды и текстиля с огромными трудовыми ресурсами.