我正在尝试理解SQL Server 2012上T-SQL中的PIVOT
和UNPIVOT
命令。我完全理解这些命令的作用,但我想了解更多细节。< / p>
目前我缺乏理解为什么当我尝试使用unpivot时,我必须为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
时。这些信息如何以及在何处存储在刚刚创建的表中?我错过了哪一部分......
为了更好地说明问题 - 添加一些描述情况的图片。
修改
答案 0 :(得分:1)
您不需要使用相同的列名,但您正在执行的操作是反转上一个命令,在这种情况下,原始字段名称是有意义的。
USE testdb;
SELECT empid, apples, oranges
FROM dbo.EmpCustOrders
UNPIVOT (oranges FOR apples IN (A, B, C, D)) AS newTable;
同样可以正常工作,但不那么有意义。