为什么有人想要将列转换为行(即旋转)?它解决了哪个问题?
我找到了一些链接,但没有得到满意的答案。
http://codeghar.wordpress.com/2007/11/03/pivot-tables/
http://msdn.microsoft.com/en-us/library/ms177410%28SQL.105%29.aspx
答案 0 :(得分:7)
通常,这是因为布局在旋转后的报表或用户界面中效果更好。
规范化数据库上的数据可能会导致多个记录的“形状”中的数据,其中UI希望将这些记录视为字段。数据规范化很棒,但是当以简洁,自然的格式表示数据时,通常需要旋转。
当然,我链接的示例是Excel,而不是真正的数据库,但图片描述了一个示例,其中透视数据看起来更自然,概念是相同的。
答案 1 :(得分:5)
关于你的问题“为什么有人想要将列转换为行(即旋转)?它解决了哪个问题?”
这不是“数据看起来如何”的问题,而是“如何组织和处理”。即:
在大多数数据库中,行表示“记录 - (实体,事件等)”和列“字段(该实体的属性)”。例如,下面是数据的典型数据库表示;
Person | Birth | Height |
-------------------------------
John | 1980 | 1.82 |
Smith | 1987 | 2.02 |
这意味着;每列代表“人物”的特定属性,当您选择特定列时,您将获得所有人的特定属性。这样,列是“维度”,所有值都具有相同的单位(数据类型),所有都是日期,都是长度等。
然而,在财务建模中,以相反的方式表示数据非常方便。例如,“每月现金流”表中的典型表格如下所示。
Item | Jan | Feb |
-----------------------------
Sales | $100 | $150 |
Tax | -$50 | -$15 |
请注意,电子表格中的此类表格不符合数据库格式,列标题是时间,但列中的值是货币值,CONFLICT,我们无法使用此列进行计算。
如果我们PIVOT这个表,它就变成了
Date | Sales | Tax |
------------------------------
Jan | $100 | -$50 |
Feb | $150 | -$15 |
现在,列维度(标题)和它们内部的数据是一致的。 日期列包含所有日期,其他日期列出所有$数字。我们可以使用列并使用它进行向量操作。
这是旋转解决的一个问题。
答案 2 :(得分:2)
这是一个例子吗?
数据提取的一个共同期望是转换的能力 多行输出到一行中的多个列。 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
这纯粹是出于简要目的。