c#中的数据透视表

She*_*raz 11 c# ado.net

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

小智 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  
Run Code Online (Sandbox Code Playgroud)

期望的输出:(这里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  
Run Code Online (Sandbox Code Playgroud)

查询:

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
Run Code Online (Sandbox Code Playgroud)

另一个输出:

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
Run Code Online (Sandbox Code Playgroud)


Mat*_*tin 2

MS-Access 具有 TRANSFORM 命令(执行数据透视),因此您可以使用 ADO.NET 查询 ms-access mdb 文件,然后在其中使用直通查询来获取无法进行数据透视的数据源(通常是 MS-Access) SQL/T-SQL)。我对此进行了概念验证,它有效,并且比使用数组进行数据透视的 VBScript 实现短了大约 5000 LOC。

通常关于 MS-Access 的贬低言论在这里并不适用,因为您实际上并未在 MS-Access 中存储数据。