嗯,我得到它的工作,但我不现在我有移动信息了解这个范围...
declare @DynSql varchar(max)
declare @cnt as integer;
declare @stdt datetime;
Set @DynSql =''
Select @stdt = CAST('07/01/2010' as DATEtime);
with months as (
SELECT DATEADD(MONTH,1,@stdt) As [month] WHERE DATEADD(MONTH,1,@stdt)<CAST('06/30/2011' AS DATEtime)
)
select COUNT(*) from months
修订:
declare @DynSql varchar(max)
declare @cnt as integer;
declare @stdt datetime;
Set @DynSql = 'With ctemonths as ('
Select @stdt = CAST('07/01/2010' as DATEtime);
Set @cnt = 1;
while @cnt <= 11 --(Select DateDiff(mm, @stdt, '06/30/2011'))
Begin
IF (@CNT =1)
Set @DynSql = @DynSql + 'Select DATEADD(MONTH,' + Cast(@cnt as nvarchar(2)) + ',''' + Convert(varchar(10), @stdt, 103) + ''') As [month] '
eLSE
Set @DynSql = @DynSql + 'UNION Select DATEADD(MONTH,' + Cast(@cnt as nvarchar
(2)) + ',''' + Convert(varchar(10), @stdt, 103) + ''') As [month] '
Set @cnt = @cnt + 1
End;
Set @DynSql = @DynSql + ') Select * from ctemonths' -- PIVOT (max([month]) for [month] in ([month]))'
exec (@DynSql)
您不能在cte中引用cte。 – websch01ar 2010-06-18 20:39:57
为什么你需要'从月份选择COUNT(*)?为什么你需要一个'动态'查询? – van 2010-06-18 20:41:09
如果我不把选择计数(*)它抱怨'未使用CTE'。我正在尝试创建Y轴上数月的数据透视查询。月数是可变的。所以我将不得不创建枢轴像枢轴(sum(fld)为col in(['jan-10'],['feb-10'] ...) – josephj1989 2010-06-18 20:54:23