【IT专家网独家】导言
数据的表现形式要求能够易于分析。将列转成行而行转成列是数据表现的另一种方式,以便终端用户可以很容易地理解。除了表现目的,你还需要将你在数据仓库应用程序之中的数据转换成不同的数据格式。这个过程可以称之为‘透视(Pivot)’,而这个过程的反向则称之为‘逆透视(Unpivot)’。
在这篇文章里,我们将讨论你在SQL Server集成服务(SSIS)中可以怎样使用透视和逆透视处理。
必要条件
因为这篇文章将告诉你怎样编写SSIS包,所以你需要具有一定的创建SSIS包的经验。不过我将努力讨论创建SSIS包的细节,无论其是否必要,但是并不打乱这篇文章的主题。此外,有必要知道怎样编写一个连接三个或更多表的查询。
软件要求安装SQL Server 2005和SQL Server 2005商业智能开发套件。这篇文章假设你在使用Adventureworks 数据库的数据。所以读者最好和SQL Server 2005数据库服务器一起安装了Adventureworks 数据库。
这个练习使用的数据文档可以从这里找到。
透视
要理解什么是透视,让我们看一个例子。下面显示了Advenureworks 数据库中Sales.SalesOrderHeader、Sales.SalesOrderOrder、Prodcution.Product和Production.ProductCategory表的关系。
从上面的关系图中,我们可以假设我们需要下面的输出。
|
产品 |
Qrt1 |
Qtr2 |
Qrt3 |
Qrt4 |
|
Accessories |
|
|
870 |
411 |
|
Bikes |
1167 |
1369 |
2844 |
2495 |
|
Components |
2641 |
2966 |
6173 |
5253 |
我们知道,你不可能通过一个简单的T-SQL查询获得上面的数据集合。不过我们可以使用一个简单的T-SQL代码定义下面的格式。
|
Name |
Qtr |
OrderQty |
|
Accessories |
3 |
870 |
|
Accessories |
4 |
411 |
|
Bikes |
1 |
1167 |
|
Bikes |
2 |
1369 |
|
Bikes |
3 |
2844 |
|
Bikes |
4 |
2495 |
|
Components |
1 |
2641 |
|
Components |
2 |
2966 |
|
Components |
3 |
6173 |
|
Components |
4 |
5253 |


