Как обобщить данные с использованием T‑SQL
Часто на практике необходимо получить отчет с какой-либо агрегированной информацией. Например, это может быть отчет по сотруднику и его количеству рабочих смен по неделям или отчет по счету и сумме операций за год в разрезе месяцев.
Решением данной задачи может оказаться группировка данных, а запрос будет выглядеть примерно следующим образом:
Минусом такого подхода является выгрузка, которую мы получим. С ней достаточно трудно работать. К примеру, если выгружаем информацию по одному счету, то получаем несколько строк, равное количеству активных месяцев, в которых были совершены операции, а не одну общую информацию по счету.
В таких случаях на помощь приходит оператор T‑SQL pivot. Данный оператор позволяет «развернуть» строки выгрузки в одну. Это удобно — если вам необходимо сравнить аналитику по разным счетам.
Как им пользоваться? Допустим, у нас есть таблица table, в ней следующие столбцы: счет, период, сумма и др. Как получить количество строк равное количеству счетов, а не периодов? Ваш pivot может выглядеть следующим образом:
Осталось автоматизировать нахождение периодов, ведь, зачастую, пользователь даже не представляет сколько их могло бы быть. В таком случаем нам нужно собрать строку со всеми периодами, находящимися в таблице table:
Теперь немного модифицируем наш запрос, чтобы разработчик в дальнейшем смог бы подставить переменную со всеми периодами:
Готово. Теперь нам не нужно перечислять вручную все периоды.
Где мы использовали T—SQL pivot?
Во-первых — в повседневных задачах, во-вторых — в спринт проектах (это удобный способ собрать статистику). К примеру, с помощью него мы выводили информацию по одному клиенту одной строкой за полгода (с большим количеством признаков).
В завершении хотел бы отметить следующее – необходимо понимать данные которые мы хотим развернуть с помощью pivot, а также то, что количество итоговых столбцов может быть очень большим, поэтому необходимо грамотно подбирать периодичность для вашего агрегирования.