在C#中的数据透视表

11

我需要在.Net中创建一个透视表。不能使用任何第三方控件(除非是免费的)。我试图寻找一般情况下如何创建透视表的文档(算法或步骤),但几乎所有的内容都与Excel有关。是否有人知道如何在C#中创建透视表?谢谢。


你是想创建一个Excel数据透视表还是在GridView中显示某种类型的透视数据? - Jimmy
我正在尝试在GridView中显示数据。 - Sheraz
数据源是什么?如果是某种形式的SQL,我建议您在SQL中执行此操作。有可能使用LINQ吗? - Frank V
啊,我希望我能使用LINQ。我们仍然在.NET 2.0上。我无法控制SQL端,所以基本上只能通过操作数据表来完成。 - Sheraz
有进展了吗?我已经在Java中从头开始实现了数据透视表。如果你仍然需要信息,我可以为你详细讲解。 - Mark Bolusmjak
3个回答

6

在这里提供帮助:http://msdn.microsoft.com/zh-cn/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

2
MS-Access有TRANSFORM命令(可进行透视),因此您可以使用ADO.NET查询ms-access mdb文件,然后在那里使用passthrough查询来访问无法透视的数据源(通常是MS-SQL/T-SQL)。我进行了一个概念验证,它能够工作,并且比使用数组进行透视的VBScript实现少了约5000行代码。
通常关于MS-Access的贬低言论在这里不适用,因为您实际上并没有将数据存储在MS-Access中。

有没有机会在这里发布一个示例? - Sheraz
转换命令:http://msdn.microsoft.com/en-us/library/bb208956.aspx 通过.NET使用MS-Access:http://www.csharphelp.com/archives/archive70.html 最后涉及连接表、你最喜欢的视图或为源数据执行一个透传查询/存储过程:http://www.aspfree.com/c/a/Microsoft-Access/On-Using-Passthrough-Queries-in-MS-Access/ - MatthewMartin

0

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

这个控件曾经在这个网站上提供下载: http://www.SQLServerAnalysisServices.com

现在该网站不再提供此控件。因此,我已经在这里上传了该控件的源代码。

  1. 您可以构建源代码
  2. 将其添加到Visual Studio工具箱中作为控件。
  3. 将控件拖放到Web表单中
  4. 设置连接字符串到多维数据集
  5. 这将显示所有维度和测量组,以便您可以轻松地通过拖放来实现数据透视表的功能

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接