Как с помощью 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 для множества столбцов, описан здесь.
Соответственно, на каких позициях бы карточка не стояла, такой трафик в поиске по данным ключам получить невозможно, а СТР прямо указывает нам на то, что показы были супер нецелевыми.
Госдеп и Минфин готовят предложение по снятию санкций с отдельных юрлиц и физлиц. С кого именно — неизвестно.
Недавно российское сообщество всколыхнула новость о том, что якобы Visa и Mastercard вернутся в Россию. Вы же помните те времена, карты этих платежных систем, выпущенные российскими банками, без проблем работали за рубежом. Увы, сейчас они котируются только в пределах родной страны. Так есть ли шанс, что международные платежные системы вернутся в Р…
Каждый предприниматель хочет видеть рост своего бизнеса. Но что делать, если компания работает, маркетинг запущен, продажи идут, а роста нет? Сейчас помогу вам разобраться, в чём причина застоя и какие действия помогут сдвинуть бизнес с мёртвой точки.
Если бизнес не растёт, значит, где-то есть слабые звенья, мешающие развитию. Важно не надеяться на чудо, а системно разбираться с проблемами. Найдите точки роста, устраните узкие места – и ваш бизнес снова начнёт двигаться вперёд!