2017-06-21 77 views
0

我有一個表(Area_Data)像這樣...參考列和合並resulst成一列

Area1   Area2   Area3 
9118890  9228834  9338890 

Area1,2,3是列標題(I簡化Area_Data表對於本次討論的緣故,但它有12個區列)

然後,我有另一個表(Area_Offset)這樣的...

Name Offset Zone  
P5.3 -4  Area1 
P3.3 -4  Area1 
P3.4 -4  Area1 
P5.4 -4  Area2 
P61.1 -9  Area3 
P5.1 -4  Area2 
P3.1 -4  Area3 

我試圖創建一個表像

Name Offset Zone  CalculatedOffset Area 
P5.3 -4  Area1 9118886    9118890  
P3.3 -4  Area1 9118886    9118890  
P3.4 -4  Area1 9118886    9118890  
P5.4 -4  Area2 9228830    9228834  
P61.1 -9  Area3 9338886    9338890 
P5.1 -4  Area2 9228830    9228834  
P3.1 -4  Area3 9338886    9338890 

(計算偏移並不重要,我想我知道如何創建一個列,如果我能得到相關區域數據到這個表)

我應該我應該怎樣做才能實現這一目標? 我想谷歌使我對一些資源提的透視我嘗試這一點,但它並沒有變成右

是我的嘗試是......

SELECT * 

    FROM Area_Offset, 
     Area_Data 
    PIVOT 
    (
    MAX(Area1) 
    FOR 
     Area1 IN (Zone) 
) AS p 

當時,這個討論TSQL Pivot without aggregate function但我不能得到它太工作。

回答

1

您正在尋找unpivot不是pivot。我想做到這一點使用outer apply

select ao.*, (v.area + ao.offset) as CalculatedOffset, v.zone as area 
from area_data ad outer apply 
    (values (area1, 'area1'), (area2, 'area2'), (area3, 'area3') 
    ) v(area, zone) join 
    area_offset ao 
    on ao.zone = v.zone; 
+0

感謝您指出我UNPIVOT,我設法得到它與unpivot的工作。我會試一試,讓它能夠在今天晚些時候使用outer apply – daeden

1

使用交叉也應用我們可以做

Select 
TT.Name, 
TT.Offset, 
TT.Zone, 
CONVERT(INT,T.VAL) - CONVERT(INT,REPLACE(TT.Offset,'-','')) ,T.VAL 
from ( 
select COL,VAL 
from @Table1 
    CROSS APPLY (VALUES ('Area1',Area1), 
         ('Area2',Area2), 
         ('Area3',Area3))CS(COL,VAL))T 
         INNER JOIN @Table2 TT 
         ON T.COL = TT.Zone 
+0

@daeden請看看 – mohan111