c#中的数据透视表

时间:2009-07-01 15:07:53

标签: c# ado.net

我需要在.net中创建一个数据透视表。不能使用任何第三方控制(除非它是免费的)。我试图找到解释如何创建数据透视表(算法或步骤)的文档,但几乎所有内容都与excel相关。    有谁知道如何在c#中创建数据透视表? 感谢

3 个答案:

答案 0 :(得分:6)

在这里帮助 http://msdn.microsoft.com/en-us/library/aa172756%28SQL.80%29.aspx

实际表格:

Year   Quarter  Amount    
1990      1      1.1  
1990      2      1.2  
1990      3      1.3  
1990      4      1.4  
1991      1      2.1  
1991      2      2.2  
1991      3      2.3  
1991      4      2.4  
1992      4      2.4  

所需输出:(此处Q为季度)

Year       Q-1       Q-2       Q-3       Q-4      
1990       1.1       1.2       1.3       1.4  
1991       2.1       2.2       2.3       2.4  
1992       0.0       0.0       0.0       2.4  

查询:

Use Northwind    
GO

CREATE TABLE Pivot    
( Year      SMALLINT,    
  Quarter   TINYINT,    
  Amount    DECIMAL(2,1) )    
GO

INSERT INTO Pivot VALUES (1990, 1, 1.1)    
INSERT INTO Pivot VALUES (1990, 2, 1.2)    
INSERT INTO Pivot VALUES (1990, 3, 1.3)    
INSERT INTO Pivot VALUES (1990, 4, 1.4)    
INSERT INTO Pivot VALUES (1991, 1, 2.1)    
INSERT INTO Pivot VALUES (1991, 2, 2.2)    
INSERT INTO Pivot VALUES (1991, 3, 2.3)    
INSERT INTO Pivot VALUES (1991, 4, 2.4)    
INSERT INTO Pivot VALUES (1992, 4, 2.4)   
GO

SELECT * FROM Pivot    
GO

SELECT Year,    
    SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1,    
    SUM(CASE Quarter WHEN 2 THEN Amount ELSE 0 END) AS Q2,    
    SUM(CASE Quarter WHEN 3 THEN Amount ELSE 0 END) AS Q3,    
    SUM(CASE Quarter WHEN 4 THEN Amount ELSE 0 END) AS Q4    
FROM Northwind.dbo.Pivot    
GROUP BY Year    
GO

另一项产出:

SELECT P1.*, (P1.Q1 + P1.Q2 + P1.Q3 + P1.Q4) AS YearTotal    
FROM (SELECT Year,
             SUM(CASE P.Quarter WHEN 1 THEN P.Amount ELSE 0 END) AS Q1,
             SUM(CASE P.Quarter WHEN 2 THEN P.Amount ELSE 0 END) AS Q2,
             SUM(CASE P.Quarter WHEN 3 THEN P.Amount ELSE 0 END) AS Q3,
             SUM(CASE P.Quarter WHEN 4 THEN P.Amount ELSE 0 END) AS Q4
     FROM Pivot AS P
     GROUP BY P.Year) AS P1
GO

答案 1 :(得分:2)

MS-Access具有TRANSFORM命令(执行转轴),因此您可以使用ADO.NET查询ms-access mdb文件,然后使用passthrough查询来获取无法转动的数据源(通常是MS-SQL / T-SQL)。我做了一个关于这个概念的证明并且它起作用并且比使用数组进行数据透视的VBScript实现短约5000个LOC。

关于MS-Access的通常贬低性评论不适用于此处,因为您实际上并未将数据存储在MS-Access中。

答案 2 :(得分:0)

CellSetGrid是一个开源ASP .Net(c#)控件,它提供了类似于数据透视表的功能。

以前可以在本网站下载: http://www.SQLServerAnalysisServices.com

现在该网站不再托管此控件。所以我上传了控件的来源 - CellSetGrid here

  1. 您可以构建源
  2. 在Visual Studio工具箱中将其添加为控件。
  3. 将控件拖放到网络表单
  4. 将连接字符串设置为多维数据集
  5. 这将显示所有维度和度量值组,以便您可以拖放您想要的功能数据透视表