Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.18;
Скачать: CL | DM;

Вниз

Двухмерный отчет   Найти похожие ветки 

 
}|{yk ©   (2004-03-19 17:25) [0]

Получаю я из запроса отчеи вида
LINE---DATE------SUMM
1.1  - 01.01.04 - 15
1.2  - 01.01.04 - 17
1.3  - 01.01.04 - 3
1.4  - 01.01.04 - 0
-------------------
-------------------
1.3  - 12.01.04 - 3
1.4  - 12.01.04 - 0
-------------------
-------------------
1.1  - 31.01.04 - 15
1.2  - 31.01.04 - 17
1.3  - 21.01.04 - 3
1.4  - 31.01.04 - 0
Т.е. сумму по статьям за месяц. Не подскажете как создать перекрестную таблицу типа
----DATE
---- 01.01.04-02.01.04-03.01.04-...
LINE
1.1   15
1.2   17
1.3    3
..
Загвоздка в том что этот отчет нужет в Excel-e (тетки привыкли в нем работать и нечего другого не хотят). Но запрос отрабатываем за 1 секунду (возвращает всего где-то 8000 записей), а вот передача в Excel занимает до 40 секунд.


 
Polevi ©   (2004-03-19 18:17) [1]

у тебя проблемы с передачей данных екселю


 
}|{yk ©   (2004-03-19 18:39) [2]

да. Таблица то формируется но ужасно медленно. Хотя сейчас я подумывю о FastReport, надоело руцями отчеты делать. Использовал XLReport но для серьйозных отчетов он не годиться


 
Mim   (2004-03-20 08:21) [3]

Конечно переходите на fr. Если идти на поводу у дамочек, то ни о какой автоматизации речи быть не может. Передавайть данные на счеты они не просят? :)


 
Oldster   (2004-03-20 09:46) [4]

/*
Для MS SQL Server. Откуда мы взяли этот пример - забыл.
Реализация перекрестного запроса, когда количество столбцов заранее неизвестно
*/
CREATE PROCEDURE sp_CrossTab
@table AS sysname,
@onrows AS nvarchar(128),
@onrowsalias AS sysname = NULL,
@oncols AS nvarchar(128),
@sumcol AS sysname = NULL
AS

DECLARE
@sql AS varchar(8000),
@NEWLINE AS char(1)

SET @NEWLINE = CHAR(10)
SET @sql =
"SELECT" + @NEWLINE + " " + @onrows +
CASE
 WHEN @onrowsalias IS NOT NULL THEN " AS " + @onrowsalias
        ELSE ""
       END

CREATE TABLE #keys(keyvalue nvarchar(100) NOT NULL PRIMARY KEY)

DECLARE @keyssql AS varchar(1000)

SET @keyssql =
 "INSERT INTO #keys " + "SELECT DISTINCT CAST("+@oncols + " AS nvarchar(100))" + "FROM " + @table

EXEC (@keyssql)

DECLARE @key AS nvarchar(100)
SELECT @key = MIN(keyvalue) FROM #keys

WHILE @key IS NOT NULL
BEGIN
 SET @sql = @sql + "," + @NEWLINE + " SUM(CASE CAST(" + @oncols + " AS nvarchar(100))" + @NEWLINE +
     "  WHEN """ + @key + """ THEN " + CASE
   WHEN @sumcol IS NULL THEN "1"
    ELSE @sumcol
   END + @NEWLINE +
 " ELSE 0" + @NEWLINE + " END) AS c" + @key  
SELECT @key = MIN(keyvalue) FROM #keys
WHERE keyvalue > @key
END

SET @sql = @sql + @NEWLINE +
 "FROM " + +@table + @NEWLINE +
 "GROUP BY " + @onrows + @NEWLINE +
 "ORDER BY " + @onrows

PRINT @sql + @NEWLINE -- Для отладки
EXEC(@sql)
GO


 Эту процедуру можно поместить в базу данных "MASTER"  MS SQL Server и использовать с любыми таблицами.

Вызов этой хранимой процедуры
 EXEC sp_CrossTab
  @table = #tmpTable,
  @onrows = "ID_Client, Name_Client",
  @oncols = "Schet",
  @sumcol = "Summa"



Страницы: 1 вся ветка

Текущий архив: 2004.04.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.059 c
1-1080734716
Серж
2004-03-31 16:05
2004.04.18
кто-нить ставил супер RX-Lib JVCL (project Jedi)?


6-1076701830
Gefest
2004-02-13 22:50
2004.04.18
Подсчет трафика!


3-1079941197
VIB
2004-03-22 10:39
2004.04.18
DBGRID


6-1076568892
Kremen
2004-02-12 09:54
2004.04.18
MAC-адрес


3-1079700776
pashaz
2004-03-19 15:52
2004.04.18
Колонка DBEHGrid в виде ComboBox