为什么有人想要将列转换为行(即旋转)?它解决了哪个问题?
我找到了一些链接,但没有得到令人满意的问题答案。
http://codeghar.wordpress.com/2007/11/03/pivot-tables/
http://msdn.microsoft.com/en-us/library/ms177410%28SQL.105%29.aspx
为什么有人想要将列转换为行(即旋转)?它解决了哪个问题?
我找到了一些链接,但没有得到令人满意的问题答案。
http://codeghar.wordpress.com/2007/11/03/pivot-tables/
http://msdn.microsoft.com/en-us/library/ms177410%28SQL.105%29.aspx
关于您的问题“为什么有人想将列转换为行(即旋转)?它解决了哪个问题?”
这不是“数据在视觉上如何”的问题,而是“如何组织和处理数据”的问题。即:
在大多数数据库中,行表示“记录 -(实体、事件等)”,列表示“字段(该实体的属性)”。例如,下面是数据的典型 DB 表示;
Person | Birth | Height |
-------------------------------
John | 1980 | 1.82 |
Smith | 1987 | 2.02 |
这意味着;每列代表“人员”的特定属性,当您选择特定列时,您将获得所有人员的特定属性。这样,一列就是一个“维度”,所有值都具有相同的单位(数据类型),都是日期,都是长度等。
然而,在金融建模中,以相反的方式表示数据非常方便。例如,“每月现金流”表中的一个典型如下所示。
Item | Jan | Feb |
-----------------------------
Sales | $100 | $150 |
Tax | -$50 | -$15 |
请注意,电子表格中的这种表格不符合数据库格式,列标题是时间,但列中的值是货币值,冲突,我们不能用这些列进行计算。
如果我们 PIVOT 这张表,它变成
Date | Sales | Tax |
------------------------------
Jan | $100 | -$50 |
Feb | $150 | -$15 |
现在,列维度(标题)和其中的数据是一致的。日期列包含所有日期,其他列包含所有 $ 数字。我们可以取一列并对其进行向量运算。
这是旋转解决的一个问题。
通常,这是因为布局在报表或透视后的用户界面中效果更好。
规范化数据库上的数据可能会产生多条记录“形状”的数据,用户界面希望将这些记录视为字段。数据规范化很棒,但是当以简洁、自然的格式表示数据时,通常需要进行数据透视。
当然,我链接到的示例是 Excel,而不是真正的数据库,但图片描述了一个示例,其中透视数据看起来更自然,并且概念是相同的。
以这个为例如何?
数据提取中的一个常见期望是能够将多行的输出转换为单行中的多列。SQL Server 2005/2008 提供了使用查询中的 PIVOT 运算符执行此操作的能力。
编辑
假设您有一个表格,按日期存储每位客户的销售额
就像是
Table
- SaleDate
- CustomerID
- SaleAmount
使用 PIVOT,您可以按月/季度/年显示每个客户的总销售额
|Client A|Client B|Client C
--------------------------------
2007| 100 | 0 | 150
2008| 0 | 200 | 160
2009| 110 | 180 | 100
这纯粹是为了总结的目的。