Мне нужно создать pivot таблицу в .net. Не могу использовать сторонние средства управления (если только они не бесплатные). Я пытался найти документацию, которая объясняет, как создать pivot table (алгоритм или шаги) в целом, но почти все связано с excel. Кто-нибудь знает, как создать pivot table на c#? Спасибо
Помогаем здесь 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
В MS-Access есть команда TRANSFORM (которая выполняет поворот), поэтому вы можете использовать ADO.NET для запроса к файлу ms-access mdb, а затем использовать сквозные запросы в нем, чтобы добраться до источника данных, который не может выполнять поворот (обычно это MS-SQL/T-SQL). Я проверил концепцию этого метода, и он сработал и оказался примерно на 5000 LOC короче, чем реализация на VBScript, которая выполняла поворот с использованием массивов.
Обычные пренебрежительные замечания о MS-Access здесь не применимы, потому что вы на самом деле не храните данные в MS-Access.
CellSetGrid - это элемент управления ASP .Net (c#) с открытым исходным кодом, который предлагает функциональность, подобную таблице pivot.
Раньше он был доступен для загрузки на этом сайте: http://www.SQLServerAnalysisServices.com
Теперь сайт больше не размещает этот элемент управления. Поэтому я загрузил исходник элемента управления - CellSetGrid здесь.