Как я могу назначить нормальную таблицу из динамической сводной таблицы?

Мне нужно сделать отчет в Stimulsoft за последние 12 месяцев с нашей текущей даты, я использовал динамическую сводную таблицу, чтобы сделать это, исходная таблица на рисунке 1

Исходные данные таблицы

Тогда сводная таблица похожа на рисунок 2 (ссылка на увеличенное изображение здесь: )

сводная таблица

Значение DACP_Value на рисунке 1 - это строка с датой, которой оно соответствует на рисунке 2. Обратите внимание, что для культуры установлено значение pt-BR (Бразилия)

Вот пример кода генерации сводной таблицы, выполненной в SQLFiddle

http://www.sqlfiddle.com/

Мне нужно поместить эти динамические данные с заголовками в обычную таблицу (это может быть временная таблица), чтобы я мог использовать их в своем запросе к отчету и быть распознанным программным обеспечением Stimulsoft.

3 ответа

Добавлять INTO YourTable после SELECT в вашем коде:

DECLARE @Col NVARCHAR(MAX) = 
    (   SELECT  ', ' + QUOTENAME(CONVERT(VARCHAR, DATEADD(MONTH, DATEDIFF(MONTH, 0, CURRENT_TIMESTAMP) - (12 - Number), 0), 103)) + ' = [' + CAST(number AS VARCHAR) + ']'
        FROM    Master..spt_values
        WHERE   Type = 'P'
        AND     number BETWEEN 0 AND 12
        FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)')


DECLARE @SQL NVARCHAR(MAX) = 
        N'WITH Data AS
        (   SELECT  DACP_ID,
                    DACP_Value,
                    [MonthNum] = 12 - DATEDIFF(MONTH, DACP_Date, CURRENT_TIMESTAMP)
            FROM    yourtable
            WHERE   DATEDIFF(MONTH, DACP_Date, CURRENT_TIMESTAMP) BETWEEN 0 AND 12
        )   
        SELECT  DACP_ID' + @Col + '
        INTO YourTable --Add this line here
        FROM    Data
                PIVOT
                (   SUM(DACP_Value)
                    FOR MonthNum IN ([0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])
                ) pvt;'

EXECUTE SP_EXECUTESQL @SQL

Также это решение для случая, когда количество данных для каждой даты одинаково, т.е. идентификаторы для каждой даты одинаковы. Если нет, возможно, придется добавить дополнительные условия для отображения заголовков на левой стороне.

Как способ, вы можете использовать мастер-отчет в инструменте Stimulsoft. В качестве основной таблицы вы можете использовать таблицу только с датой:

SELECT CONVERT(DATE, DATEADD(MONTH, DATEDIFF(MONTH, 0, CURRENT_TIMESTAMP) - (12 - Number), 0), 103) AS DT,
       CONVERT(VARCHAR(2),MONTH(DATEADD(MONTH, DATEDIFF(MONTH, 0, CURRENT_TIMESTAMP) - (12 - Number), 0))) + CONVERT(VARCHAR(4),YEAR(DATEADD(MONTH, DATEDIFF(MONTH, 0, CURRENT_TIMESTAMP) - (12 - Number), 0))) As MonthYear
  FROM Master..spt_values
 WHERE Type = 'P'
       AND number BETWEEN 0 AND 12

Подробная таблица "yourTable" с дополнительным столбцом:

select *, convert(varchar(2),Month(DACP_date)) + convert(varchar(4),Year(DACP_date)) as MonthYear from yourtable

Реализация на столбцы MonthYear. В отчете вы можете использовать компонент Cross-Data для основных данных и компонент DataBand для подробных данных. Пожалуйста, смотрите изображение по следующей ссылке: http://imgur.com/Ve03BXU

Другие вопросы по тегам