Pivot Table in c#

前端 未结 3 1630
不知归路
不知归路 2020-12-28 20:22

I need to create a pivot table in .net. Can\'t use any third party control (unless it\'s free). I tried to find documentation that explains how to create pivot table (algori

相关标签:
3条回答
  • 2020-12-28 21:04

    Helping here http://msdn.microsoft.com/en-us/library/aa172756%28SQL.80%29.aspx

    Actual Table:

    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  
    

    Desired Output: (Here Q for Quarter)

    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  
    

    Query:

    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
    

    Another Output:

    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
    
    0 讨论(0)
  • 2020-12-28 21:21

    MS-Access has the TRANSFORM command (which does a pivot), so you could use ADO.NET to query a ms-access mdb file, then use passthrough queries there to get to the data source that can't pivot (usually MS-SQL/T-SQL). I did a proof of concept of this and it worked and was about 5000 LOC shorter than the VBScript implementation that did the pivot using arrays.

    The usual disparaging remarks about MS-Access don't apply here because you aren't actually storing data in MS-Access.

    0 讨论(0)
  • 2020-12-28 21:22

    CellSetGrid is an Open Source ASP .Net (c#) control, which offers pivot table like functionality.

    This used to be available for download in this site: http://www.SQLServerAnalysisServices.com

    Now the site does not host this control anymore. So I have uploaded the source of the control - CellSetGrid here.

    1. You can build the source
    2. Add this as a Control in Visual Studio toolbox.
    3. Drag and Drop control to a web form
    4. Set the connection string to the cube
    5. This will show all the dimensions and measure groups so you can drag n drop what you want to get a pivot table like functionality
    0 讨论(0)
提交回复
热议问题