Я пытаюсь понять команды PIVOT
и в T-SQL на SQL Server 2012. Я полностью понимаю, что делают эти команды, но я хочу понять еще несколько деталей.Как работают PIVOT и UNPIVOT?
В настоящее время мне не хватает понимания того, почему, когда я пытаюсь использовать univot, я должен поместить исходные имена столбцов исходной таблицы для команды pivot. Сначала я создал новую таблицу и поместил там некоторые данные из другой, используя команду pivot.
USE testdb;
IF OBJECT_ID('dbo.EmpCustOrders', 'U') IS NOT NULL
DROP TABLE dbo.EmpCustOrders;
SELECT empid, A, B,C, D
INTO dbo.EmpCustOrders
FROM (SELECT empid, custid, qty
FROM dbo.Orders) AS D
PIVOT (SUM(qty) FOR custid IN (A, B, C, D)) As newtable;
Все в порядке. Тогда я пытаюсь использовать UNPIVOT
команду для просто создать некоторый вид таблицы:
USE testdb;
SELECT empid, custid, qty
FROM dbo.EmpCustOrders
UNPIVOT (qty FOR custid IN (A, B, C, D)) AS newTable;
Результат - это все работает отлично, я могу понять, почему, когда я пишу SELECT
, я должен поместить имена столбцов, custid
и qty
, которые являются точно так же, как и в предыдущей таблице, но не тогда, когда я пишу UNPIVOT
на отдельной производной таблице. Как и где эта информация хранится в только что созданной таблице? Какую часть этого я пропущу ...
Для лучшего освещения вопроса - добавьте немного рисунка с описанной ситуацией.
EDIT
Этот снимок экрана является эпическим. Хороший выбор цвета тоже. – Yuck
Итак, вы не понимаете, почему вам нужно помещать имена столбцов в 'UNPIVOT' ?. Как SQL Server знает имена, которые он должен использовать ?, нет никакого способа узнать, что таблица, которую вы открываете, ранее была создана из другого 'PIVOT', поэтому он не может просто догадаться, что он должен получить имена столбцов из таблицу «Заказы» – Lamak
@Lamak, но если я использую 'PIVOT' для заполнения отдельной таблицы в базе данных (значит, я заполняю пустую таблицу с информацией из другой), если тогда я хочу использовать' UNPIVOT' только что созданную таблицу (с уже добавлена информация из запроса PIVOT, но с разными именами столбцов - вы можете видеть это на рис.) Я должен использовать имя столбца из таблицы, которое было похоже на источник для команды 'PIVOT'? Я прав? – gbk