Логическая обработка запросов: предложение FROM и UNPIVOT | 1-U1, 1-U2, 1-U3
Содержание:
1. Введение;
2. 1-U1, 1-U2, 1-U3 (Вы читаете данный раздел);
3. Альтернативное решение с использованием APPLY;
4. Сочетание операторов.
Первый шаг к обратному транспонированию данных заключается в формировании отдельного экземпляра каждой исходной строки для каждого столбца без транспонирования. Наши столбцы без транспонирования представляют годы заказов: 2014, 2015 и 2016, поэтому на данном шаге формируется копия для каждого года. В таблице ниже показан результат этого шага для нашей тестовой задачи.
Как отмечалось выше, при обратном транспонировании исходные столбцы трансформируются в два целевых столбца — столбец значений и столбец имен. Как можно заметить, первый шаг всегда создает столбец имен (orderyear в нашем примере).
На втором шаге, по сути, создается столбец значений (в нашем примере ему назначено имя val). Извлекается элемент из исходных столбцов, соответствующих именам, которые представлены текущей копией. В нашем примере извлекается значение из исходного столбца года, который соответствует текущему значению orderyear. Если orderyear — 2014, val возвращает значение из столбца [2014], если orderyear — 2015, val возвращает значение из [2015], а когда orderyear — 2016, val возвращает значение из (2016). В таблице ниже показан желаемый результат этого шага для нашей тестовой задачи.
Третий и последний шаг обратного транспонирования — удалить строки со значениями NULL в результирующем столбце значений. Обычно хранить эти строки не требуется, поскольку они представляют неприменимые случаи. В нашем примере это случаи, когда сотрудник бездействовал в течение заданного года.
Выходные данные этого шага в нашем примере были показаны в таблице выше как желаемый вывод задачи обратного транспонирования.
Как отмечалось, оператор UN PIVOT построен, подобно оператору PIVOT, как шаг в предложении FROM. Его синтаксис требует указать три упомянутых выше элемента, участвующих в задаче обратного транспонирования.
1. Целевое имя столбца, в котором будут храниться значения исходного столбца (в нашем случае val).
2. Целевое имя столбца, в котором будут храниться имена исходного столбца (в нашем случае orderyear).
3. Имена исходных столбцов (в нашем случае [2014], [2015], [2016]).
Вы указываете эти элементы в операторе UN PIVOT с использованием следующего синтаксиса:
В применении к нашим данным полный запрос с оператором U N PIVOT выглядит следующим образом:
На рисунке выше показано, как элементы, участвующие в операторе UNPIVOT, соответствуют входным и выходным данным оператора. Обратите внимание, что столбец имен (orderyear) вводится как NVARCHAR (128). Если требуется другой тип, например INT, следует выполнить его приведение.
На рисунке выше показана блок-схема, описывающая логическую обработку запроса предложения FROM, со всеми четырьмя табличными операторами, в том числе оператором UNPIVOT.
Вы не IT-специалист, а азартный игрок, поэтому вас совершенно не интересует обработка каких-то там логических запросов. Так что, я рекомендую вам сразу же перейти на http://1.автоматывулкан.com/casino-vulkan/ (http://1.автоматывулкан.com/casino-vulkan/). Здесь вы найдете свои самые любимые игровые автоматы. Приступайте к игре, и, кто знает, возможно именно сегодня вам улыбнется удача!
1. Введение;
2.
3. Альтернативное решение с использованием APPLY;
4. Сочетание операторов.
1-U1. Создание копий
Первый шаг к обратному транспонированию данных заключается в формировании отдельного экземпляра каждой исходной строки для каждого столбца без транспонирования. Наши столбцы без транспонирования представляют годы заказов: 2014, 2015 и 2016, поэтому на данном шаге формируется копия для каждого года. В таблице ниже показан результат этого шага для нашей тестовой задачи.
Как отмечалось выше, при обратном транспонировании исходные столбцы трансформируются в два целевых столбца — столбец значений и столбец имен. Как можно заметить, первый шаг всегда создает столбец имен (orderyear в нашем примере).
1-U2. Извлечение элемента
На втором шаге, по сути, создается столбец значений (в нашем примере ему назначено имя val). Извлекается элемент из исходных столбцов, соответствующих именам, которые представлены текущей копией. В нашем примере извлекается значение из исходного столбца года, который соответствует текущему значению orderyear. Если orderyear — 2014, val возвращает значение из столбца [2014], если orderyear — 2015, val возвращает значение из [2015], а когда orderyear — 2016, val возвращает значение из (2016). В таблице ниже показан желаемый результат этого шага для нашей тестовой задачи.
1-U3. Удаление значений NULL
Третий и последний шаг обратного транспонирования — удалить строки со значениями NULL в результирующем столбце значений. Обычно хранить эти строки не требуется, поскольку они представляют неприменимые случаи. В нашем примере это случаи, когда сотрудник бездействовал в течение заданного года.
Выходные данные этого шага в нашем примере были показаны в таблице выше как желаемый вывод задачи обратного транспонирования.
Оператор UNPIVOT
Как отмечалось, оператор UN PIVOT построен, подобно оператору PIVOT, как шаг в предложении FROM. Его синтаксис требует указать три упомянутых выше элемента, участвующих в задаче обратного транспонирования.
1. Целевое имя столбца, в котором будут храниться значения исходного столбца (в нашем случае val).
2. Целевое имя столбца, в котором будут храниться имена исходного столбца (в нашем случае orderyear).
3. Имена исходных столбцов (в нашем случае [2014], [2015], [2016]).
Вы указываете эти элементы в операторе UN PIVOT с использованием следующего синтаксиса:
SELECT *
FROM <source table>
UNPIVOT( 1 FOR 2 IN (3) ) AS <alias>;В применении к нашим данным полный запрос с оператором U N PIVOT выглядит следующим образом:
SELECT empid, orderyear, val
FROM Sales.MyPivotedOrders
UNPIVOT( val FOR orderyear IN ([2014],[2015],[2016]) ) AS U;На рисунке выше показано, как элементы, участвующие в операторе UNPIVOT, соответствуют входным и выходным данным оператора. Обратите внимание, что столбец имен (orderyear) вводится как NVARCHAR (128). Если требуется другой тип, например INT, следует выполнить его приведение.
На рисунке выше показана блок-схема, описывающая логическую обработку запроса предложения FROM, со всеми четырьмя табличными операторами, в том числе оператором UNPIVOT.
Вы не IT-специалист, а азартный игрок, поэтому вас совершенно не интересует обработка каких-то там логических запросов. Так что, я рекомендую вам сразу же перейти на http://1.автоматывулкан.com/casino-vulkan/ (http://1.автоматывулкан.com/casino-vulkan/). Здесь вы найдете свои самые любимые игровые автоматы. Приступайте к игре, и, кто знает, возможно именно сегодня вам улыбнется удача!