2011-04-19 88 views
1

我有一個簡單的數據表,需要將行數據轉換爲列數據。例如,讓我創建一個簡單的員工表:如何將行數據轉換爲列數據?

Employee Table

我需要使用上面的SQL創建表結構這樣的側方比較報告:

Report

有人可以使用上面的示例表向我展示sql代碼嗎?或者可以使用內置的ASP.net或DevExpress控件自動完成?

您的反饋總是讚賞!

謝謝!

+0

SQL中的數據透視http://msdn.microsoft.com/en-us/library/ms177410.aspx – Magnus 2011-04-19 19:25:16

+0

@Magnus它看起來像SQL中的Pivot需要某種類型的聚合,比如count/sum/avg。有人可以展示如何使上表過渡發生?即使它使用CASE語句。 – David 2011-04-19 21:10:05

+0

看看這個http://stackoverflow.com/questions/1343145/tsql-pivot-without-aggregate-function – Magnus 2011-04-19 21:26:39

回答

1

有使用SQL it's:

WITH FieldValueCte AS(  
SELECT Name, 
     'Department' Field, 
     Department Value 
FROM Table1 UNION ALL 
SELECT Name, 
     'Sex' Field, 
     Sex Value 
FROM Table1 UNION ALL 
SELECT Name, 
     'HireDate' Field, 
     HireDate Value 
FROM Table1 UNION ALL 
SELECT Name, 
     'Salary' Field, 
     Salary Value 
FROM Table1 UNION ALL 
SELECT Name, 
     'Comments' Field, 
     Comments Value 
FROM Table1) 

SELECT [Field], [John Doe], [Jane Smith], [Peter Parker], [Jessica James] 
FROM 
(SELECT Field, Name, Value 
    FROM FieldValueCte) AS SourceTable 
PIVOT 
(
MIN(Value) 
FOR Name IN ([John Doe], [Jane Smith], [Peter Parker], [Jessica James]) 
) AS PivotTable; 
3

您正在尋找的是「透視」功能。

你可以手工做他們的SQL裏面,但它也像DevExpress的有這個控制...

http://www.devexpress.com/Products/NET/Controls/ASP/Pivot_Grid/

- 編輯 -

像上面的評議發佈,here's an introduction to the pivot function in SQL Server ......什麼讓這個棘手的是,除非你確切地知道什麼值將組成你的列,你將不得不使用動態SQL來構建樞紐。

因爲它可以是一個有點棘手的SQL做的,我會盡量堅持到DevExpress的,因爲你已經擁有它......

我認爲,如果你是多個數據點添加到您的數據透視網格,它看起來像你所期望的。下面是從DevExpress的屏幕截圖,類似於你在找什麼...

enter image description here

Here's the page that shows this technique ...在你的情況,而不是排分組,你可能只是做一個「總計」,然後隱藏列...

+0

我已經使用過幾次Devexpress PivotGrid,似乎想要總共有兩個或更多的字段匯合的東西。按部門顯示男性女性女性的平均工資。(部門設置爲「行」字段和性別設置爲「列」字段,薪酬設置爲aspxPivotGrid的「數據」字段)我不知道是否有可能讓樞紐網格顯示每個字段名稱在第一個如我的示例所示,後續字段中的行和列值。 – David 2011-04-19 20:13:07

+0

您能否使用上面的示例表格顯示數據透視SQL查詢? – David 2011-04-19 20:18:24

+0

我想你仍然想念我後。我不想要任何分組或合計。 aspxPivot控件需要在屏幕截圖的白色區域中顯示總數。如果你不給它一些東西或者通過電網組顯示什麼都沒有。我不確定它的解決方案。 – David 2011-04-19 21:08:25