2012-03-21 80 views
2

我需要使用SQL Server 2008R2存储过程,将返回下面的数据形状来创建报告: enter image description here透视数据

我在SQL Server视图返回的数据是这样的: enter image description here

用户将选择start_date和end_date,并且该日期范围将以列的形式显示,即如果用户选择2012年4月1日至2012年4月7日,则选择7天,第1天至第7天将显示为列。左栏将显示“ApplicationId”字段的总数。 请注意,“分配”,“处理”,..是状态字段。

回答

1

检查这个例子..就像我已经实施使用这一个。你可以创建你的动态列/动态数据透视表。但你必须在sql server中使用execute

您可以根据需要实施/修改您的查询。

编号: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 2012-03-21 13:03:56

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吃了一列 – hotcoder 2012-03-21 13:04:17