2012-03-21 131 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