【发布时间】:2015-01-19 17:27:57
【问题描述】:
我有一个针对静态列值的有效数据透视查询,我想将其转换为动态列值。
查询是:
with a as (
select request_id, dateadd(month,datediff(month,0,logged_datetime),0) as 'Month'
,dateadd(month,datediff(month,0,logged_datetime),0) as 'Year'
from requests
)
select * from (
select datepart(m,a.Month) as 'months',datepart(YEAR,a.Year) as 'years',a.request_id
from a ) ps
pivot (
count(request_id) for [years] in ([2008],[2009],[2010],[2011],[2012],[2013],[2014],[2015])
) as pvt
order by months
对于下面编写的动态查询,我遇到了类似
的错误消息 207,级别 16,状态 1,第 5 行无效的列名称“2010”。 :
select distinct datepart(year,dateadd(month,datediff(month,0,logged_datetime),0)) as 'Yearz'
into #t
FROM requests
DECLARE @Dynamic AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)
SELECT @ColumnName= ISNULL(@ColumnName + ',','')
+ QUOTENAME(Yearz)
FROM (SELECT * from #t) AS Yea
SET @Dynamic =
N'
select * from (
select datepart(m,dateadd(month,datediff(month,0,logged_datetime),0)) as months,' + @ColumnName + ',request_id
from requests ) ps
pivot (
count(request_id) for [Years] in (' + @ColumnName + ')
) as pvt
order by months
'
EXEC sp_executesql @Dynamic
【问题讨论】:
-
那是什么问题
-
@NoDisplayName 我尝试的动态查询不起作用。出现错误。
-
发现它从数据中心源查询中删除了 ` + @ColumnName + `。试试这个。
..select datepart(m,dateadd(month,datediff(month,0,logged_datetime),0)) as months,request_id from requests ..
标签: sql sql-server dynamic-sql