我需要使用SQL Server 2008R2存儲過程,將返回下面的數據形狀來創建報告: 透視數據
我在SQL Server視圖返回的數據是這樣的:
用戶將選擇start_date和end_date,並且該日期範圍將以列的形式顯示,即如果用戶選擇2012年4月1日至2012年4月7日,則選擇7天,第1天至第7天將顯示爲列。左欄將顯示「ApplicationId」字段的總數。 請注意,「分配」,「處理」,..是狀態字段。
我需要使用SQL Server 2008R2存儲過程,將返回下面的數據形狀來創建報告: 透視數據
我在SQL Server視圖返回的數據是這樣的:
用戶將選擇start_date和end_date,並且該日期範圍將以列的形式顯示,即如果用戶選擇2012年4月1日至2012年4月7日,則選擇7天,第1天至第7天將顯示爲列。左欄將顯示「ApplicationId」字段的總數。 請注意,「分配」,「處理」,..是狀態字段。
檢查這個例子..就像我已經實施使用這一個。你可以創建你的動態列/動態數據透視表。但你必須在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 - 它包含了一些例子有點符合您的要求..
希望這有助於..
你可以使用一點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
如何生成動態d吃了一列 – hotcoder 2012-03-21 13:04:17
生成動態列是實際問題:( – hotcoder 2012-03-21 13:03:56