数据库透视 - 目的是什么?

Mas*_*ter 10 database pivot

为什么有人想将列转换为行(即旋转)?它解决了哪个问题?

我找到了一些链接,但没有得到满意的答案.

http://codeghar.wordpress.com/2007/11/03/pivot-tables/

http://msdn.microsoft.com/en-us/library/ms177410%28SQL.105%29.aspx

Dav*_*vid 8

通常,这是因为布局在旋转后的报表或用户界面中效果更好.

规范化数据库上的数据可能导致数据处于多个记录的"形状"中,其中UI希望将这些记录视为字段.数据规范化很好,但是当以简洁,自然的格式表示数据时,通常需要旋转.

这里的例子.

当然,我链接的示例是Excel,而不是真正的数据库,但图片描述了一个示例,其中数据透视数据看起来更自然,概念是相同的.


小智 7

关于您的问题“为什么有人想要将列转换为行(即,透视)?它可以解决哪个问题?”

这不是“数据看起来如何”的问题,而是“如何组织和处理数据”的问题。即:

在大多数数据库中,行表示“记录-(实体,事件等)”,列表示“字段(该实体的属性)”。例如,以下是数据的典型DB表示形式;

Person      |  Birth | Height |
-------------------------------
John        |   1980 |  1.82  |
Smith       |   1987 |  2.02  |
Run Code Online (Sandbox Code Playgroud)

那意味着 每列代表“人员”的特定属性,当您选择特定列时,您将获得所有人员的特定属性。这样,一列就是“维度”,并且所有值都具有相同的单位(数据类型),所有都是日期,所有都是长度,等等。

但是,在财务建模中,以另一种方式表示数据非常方便。例如,“每月现金流量”表中的典型表格如下所示。

Item         |  Jan |   Feb |
-----------------------------
Sales        | $100 |  $150 |
Tax          | -$50 |  -$15 |
Run Code Online (Sandbox Code Playgroud)

请注意,电子表格中的这种表格并不遵循数据库格式,列标题是时间,但是列中的值是货币值CONFLICT,我们无法使用此列进行计算。

如果我们将这个表PIVOT,它将变成

Date         | Sales |  Tax  |
------------------------------
Jan          |  $100 |  -$50 |
Feb          |  $150 |  -$15 |  
Run Code Online (Sandbox Code Playgroud)

现在,列尺寸(标题)和其中的数据是一致的。日期列包含所有日期,其他列包含所有$数字。我们可以取一个列并对其进行矢量运算。

这是枢轴解决的一个问题。