我有一个像这样的表(Area_Data)...
Area1 Area2 Area3
9118890 9228834 9338890
Area1,2,3是列标题(为了便于讨论,我简化了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,但我无法理解它。
答案 0 :(得分: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;
答案 1 :(得分:1)
使用Cross Apply我们也可以
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