日期:2014-05-17  浏览次数:20725 次

列数的变动

--整理
   select a.CompanyID,a.SegtID,a.SegtName,a.AcctNoBE,a.AcctName,a.AcctID,
   b.ClosingAmtBase,c.fromdateString  into #TT
   from dbo.D_AcctSegtType a inner join dbo.F_AccountEntry b
   on a.AcctID=b.AcctID and a.CompanyID =b.companyid 
   inner join dbo.D_FiscalDate c on b.FiscalDateID=c.FiscalDateID and b.CompanyID=c.CompanyID
   where  a.AcctGroup='Balance Sheet' and fromdateString between '20110401' and '20121201'
 
     
  --列转行    
 declare @datename varchar(300)
 select @datename=ISNULL (@datename+',','')+quotename ([fromdatestring])from #TT group by [fromdatestring]
 order by [fromdatestring]
 insert into [dbo].[RPT_resultA3_restart](
[CompanyID] ,
[SegtID] ,
[Segtname] ,
[acctnobe] ,
[acctname] ,
[acctid] ,
[Mtd201104] ,
[Mtd201105] ,
[Mtd201106] ,
[Mtd201107] ,
[Mtd201108] ,
[Mtd201109] ,
[Mtd201110] ,
[Mtd201111] ,
[Mtd201112] ,
[Mtd201201] ,
[Mtd201202] ,
[Mtd201203] ,
[Mtd201204] ,
[Mtd201205] ,
[Mtd201206] ,
[Mtd201207] ,
[Mtd201208] ,
[Mtd201209] ,
[Mtd201210] 


)

 exec('select *from #TT pivot (max([closingamtbase])for [fromdatestring] in ('+@datename+'))b')

问题是这样的,大家都看到我在整理那里设了between '20110401' and '20121201'
的条件,但数据库里面只在到20121001的数,那么转出来就没有了20121101和20121201的列了
这样我插到RPT_resultA3_restart表的时候的列数就不一样了,只有每个月在insert 那里加了
,我不想这样,有什么办法可以在转列随意加几列,或insert 那里的列跟着转出来的列数变!谢谢!

------解决方案--------------------
--drop table [dbo].[RPT_resultA3_restart]
exec('select * into [dbo].[RPT_resultA3_restart] from #TT pivot (max([closingamtbase])for [fromdatestring] in ('+@datename+'))b')

------解决方案--------------------
引用:
引用:
我承认跟不上你的逻辑
不要这样说嘛!是我表达不清啦!问题解决了,分给你了!
解决了,结贴吧,蹭点分