从单元格值中引用不同 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
我有一个像这样的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