枢转多个列

我有两个SQL Server 2008中的表,在一个我有每周的文章的需求,在另一个我有股票,事端喜欢

需求:

Article Week Need -------------------------------------------------------------------- aa 1 25 aa 2 13 aa 4 33 aa 6 21 aa 25 40 ab 1 1 ab 2 3 ab 16 14 ab 50 50 

STOCKS

  Article Units --------------------------------------------------------------------------- aa 80 ab 14 ac 8 

我需要展示一些像:

  Article WEEK1 WEEK2 WEEK4 WEEK6 WEEK16 WEEK25 needs stock needs stock needs stock needs stock needs stock needs stock aa 25 80 13 55 42 22 21 20 0 -1 40 -1 ab 1 14 3 13 0 10 0 10 14 10 0 -4 

这将显示在Encel,为此,我使用C#和T-SQL,我的问题是,如果使用PIVOT我可以oly做每周的需求,但我期望的需求和股票,如果我没有枢轴我可以获取本周股票的文章,将数据保存在对象中,并每周进行股票计算,然后格式化Excel,但我有一个问题,我需要在对象中的东西:

 puclic class needsPerWeek { string Article{get;set;} int needsWeek1{get;set;} int stockWeek1{get;set;} int needsWeek2{get;set;} int stockWeek2{get;set;} int needsWeek{get;set;} int stockWeek4{get;set;} int needsWeek6{get;set;} int stockWeek6{get;set;} int needsWeek16{get;set;} int stockWeek16{get;set;} int needsWeek25{get;set;} int stockWeek25{get;set;} int needsWeek50{get;set;} int stockWeek50{get;set;} .... .... } 

但是我不知道我有多less周才会重新开始。

那么,我可以做这个与枢轴吗?或者任何其他方式来获得这个?

只需复制并粘贴下面的代码,并根据您的需要做一些更改。 我们只是dynamic的列string(UnitsWeek1,UnitsWeek2,NeedsWeek1 …等)。 并且使用Pivot获得两个表格,并通过join两个表格来获得一张决赛桌。

 DECLARE @cols1 AS NVARCHAR(MAX), @query1 AS NVARCHAR(MAX), @cols2 AS NVARCHAR(MAX), @query2 AS NVARCHAR(MAX); select @cols1 = STUFF((SELECT distinct ',' + QUOTENAME('NeedsWeek'+Week) from NeedsMaster FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query1 = 'SELECT Article, ' + @cols1 + ' from ( select Article , Need ,''NeedsWeek''+Week as Week from NeedsMaster ) x pivot ( min(need) for Week in (' + @cols1 + ') ) p ' select @cols2 = STUFF((SELECT distinct ',' + QUOTENAME('UnitsWeek'+n.Week) from NeedsMaster n left join StocksMaster s on s.Article=n.Article FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query2 = 'Select * from (SELECT Article, ' + @cols2 + ' from ( select n.Article , s.Units ,''UnitsWeek''+n.Week as Week from StocksMaster s inner join NeedsMaster n on s.Article=n.Article ) x1 pivot ( min(Units) for Week in (' + @cols2 + ') ) p1 ) a inner join (SELECT Article, ' + @cols1 + ' from ( select Article , Need ,''NeedsWeek''+Week as Week from NeedsMaster ) x2 pivot ( min(need) for Week in (' + @cols1 + ') ) p2 ) b on a.Article=b.Article' execute(@query2) 

(@ query1只是为了更好的理解目的)。 试一试,我希望你会按照你的要求编辑它。

参考