2012-03-21 4 views
2

мне нужно создать отчет с помощью 2008R2 хранимой процедуры, которая возвращает следующую форму данных SQL Server: enter image description hereСводные данные в SQL Server

Мой взгляд в SQL Server возвращает данные, как это: enter image description here

Пользователь будет выбирать start_date и end_date, и этот диапазон дат будет отображаться в столбцах, то есть, если пользователь выбирает Apr 1,2012 по 7 апреля 2012 года, то через 7 дней в столбцах будут отображаться дни с 1 по 7. В левом столбце будут отображаться итоговые значения поля «ApplicationId». Обратите внимание, что «Назначение», «Обработка», .. являются полем «Статус».

ответ

1

Проверьте этот пример .. как будто я реализовал это. вы можете создать свои динамические столбцы/динамический свод. но вы должны с ним использовать execute в sql-сервере.

Вы можете реализовать/изменить свой запрос по своему усмотрению.

Ref: Pivots with Dynamic Columns in SQL Server 2005

DECLARE @query NVARCHAR(4000) SET @query = N'SELECT tID, '+ @cols +' FROM (SELECT t2.tID 
     , t1.ColName 
     , t2.Txt FROM Table1 AS t1 
     JOIN Table2 AS t2 ON t1.ColId = t2.ColID) p PIVOT (MAX([Txt]) FOR ColName IN ('+ @cols +')) AS pvt ORDER BY tID;' 

Executing this with 

EXECUTE(@query) 

Для получения дополнительной справки об этом:
SQL Server - Dynamic PIVOT Table - SQL Injection
Dynamic PIVOT Query For Cross Tab Result
Dynamic Pivoting in SQL Server - он содержит пример того, что несколько соответствовать вашим требованиям ..

Надежда эта помощь ..

+0

Создание динамических столбцов - актуальная проблема :( – hotcoder

0

Вы можете сделать это, используя немного DATEDIFF и PIVOT. Как это ...

select name, max(DAY_1) as DAY_1, max(DAY_2) as DAY_2, max(DAY_3) as DAY_3, max(DAY_4) as DAY_4, max(DAY_5) as DAY_5 from (
SELECT s.value_Date, name, end_datetime, 
'DAY_' + cast(DATEDIFF(DAY, dates.value_date, today.value_date) as varchar) as day 
FROM schema1.VW_SKY_BATCH_STATUS S 
CROSS JOIN (select top 1 VALUE_DATE from schema2.BUSINESS_DATE where CALENDAR = 'london' order by VALUE_DATE desc) as today 
JOIN (select top 6 VALUE_DATE from schema2.BUSINESS_DATE where CALENDAR = 'london' order by VALUE_DATE desc) dates on dates.VALUE_DATE = s.VALUE_DATE 
JOIN Reports.REPORT_DESCRIPTION rd on rd.ID = s.PROFILE_ID) 
AS SourceTable 
PIVOT (MAX(end_datetime) FOR day IN (DAY_1, DAY_2, DAY_3, DAY_4, DAY_5)) AS pt 
GROUP BY name 
+0

Как создать динамический d ate column – hotcoder

Смежные вопросы