2012-07-24 15 views

回答

7

通常情況下,這是因爲佈局在擺動後在報表或用戶界面中效果更好。

規範化數據庫上的數據可能導致數據處於多個記錄的「形狀」中,其中UI想要將這些記錄看作字段。數據標準化很好,但是當以簡潔自然的格式表示數據時,通常需要進行旋轉。

example here

當然,我鏈接到的示例是Excel,而不是真實的DB,但圖片描述了旋轉數據看起來更自然的示例,並且概念是相同的。

+0

謝謝!通過查看這個例子,我可以看到一個可能的使用pivoting - 假設我們想要添加3個新產品Prod G,Prod H,Prod I.通過使用pivoted方式(GI table),我們可以通過簡單地增加新產品行而不是增加列數。因此,不需要添加新的列。當然,這需要更多的記憶。但是,我不知道誰會想要使用這個數據透視表,爲什麼? – Master 2012-07-24 06:10:31

2

這個怎麼樣作爲一個例子嗎?

How to PIVOT Data Using T-SQL

在數據提取的一個常見的期望是轉變 多行的輸出爲多列中的單個行的能力。 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 

這純粹是爲了簡要目的。

+0

確實,這是pivoting的定義。爲什麼有人想把列轉換成行?什麼目的 ? – Master 2012-07-24 05:39:30

3

關於您的問題「爲什麼有人想將列轉換爲行(即,旋轉)?它解決了哪個問題?」

這不是「數據如何看起來直觀」,而是「如何組織和處理」。即:

在大多數數據庫中,行代表「記錄 - (實體,事件等)」和列「字段(該實體的屬性)」。例如,下面是數據的典型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 | 

現在,柱尺寸(標題),並在其內部的數據是一致的。 日期欄包含所有日期,其他包含所有$數字。我們可以拿一個專欄,並用它做矢量操作。

這是一個旋轉解決的問題。

+0

「每一行代表」個人「的特定屬性,當您選擇特定的行時,您將獲得所有人的特定屬性」 - 我認爲您實際上是指「每列」和「particulat列」......我冒着改變措詞的自由。否則,一個非常好的例子 - 的確如此 - 謝謝! – 2017-04-28 09:10:05