[英]Pivot more than one column
我在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
股票
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,我可以每周滿足需求,但我希望有需求和庫存,如果我沒有樞軸,我可以每周獲取庫存的文章,將數據保存在對象中,每周進行庫存的計算,然后格式化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;}
....
....
}
但是我不知道我會收到多少周。
那么,我可以使用數據透視表嗎?還是可以通過其他任何方式來做到這一點?
只需復制並粘貼下面的代碼,然后根據需要進行一些更改。 我們只是制作動態列字符串(UnitsWeek1,UnitsWeek2,NeedsWeek1 ...等)。 並使用Pivot
獲取兩個表,並通過將兩個表Pivot
獲得最終表。
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只是為了更好地理解目的)。 試試看,我希望您可以根據需要進行編輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.