从单元格值中引用不同 table 中的列并将结果合并到一列中

Reference Columns in diffrent table in from cell values and merge resulst into one column

我有一个像这样的table (Area_Data)...

Area1         Area2         Area3
9118890       9228834       9338890

区域 1、2、3 是列 headers(为了便于讨论,我简化了 Area_Data table,但它有 12 个区域列)

那我还有一个像这样的table(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

我正在尝试创建一个 table 喜欢

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

(计算出的偏移量并不重要我想我知道如何创建该列,如果我可以将相关的区域数据放入此 table)

我应该怎么做才能做到这一点? 我试过 google 引导我找到一些提到 Pivot 的资源 我尝试过这个但结果不正确

我尝试的是...

SELECT *

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

然后是这个讨论TSQL Pivot without aggregate function,但我无法让它发挥作用。

您正在寻找 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;

我们也可以使用交叉应用

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