我需要使用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