我想从表中获取值,但是引用是目标表的列名而不是键-是的,设计不好。 老实说,我不知道从哪里开始。你能给我一些方向吗?
这就是我所拥有的
“来源”表
// scaled X - half scaled zoom factor * upscaled lense size
zx=pos.x*cx -(0.5*cx)* (lw/cx) ;
zy=pos.y*cy -(0.5*cy)* (lh/cy) ;
// re evaluation the eq :
zx=pos.x*cx -(0.5*lw) ;
zy=pos.y*cy -(0.5*lh) ;
带表的表
ID | TargetField
---+-------------
1 | Field1
1 | Field2
2 | Field2
3 | Field1
结果将是这样:
ID | Field1 | Field2
---+--------+---------
1 | A | B
2 | R | C
3 | X | D
如前所述,不知道如何开始...我在看一些动态SQL吗?
编辑:该示例已相当简化,因此开关/大小写对我不起作用。我想使用动态sql。
答案 0 :(得分:1)
这是一种不需要动态SQL的方法。就是说,我怀疑动态SQL和/或UNPIVOT的性能会更高。
交叉应用B会将记录转换为XML
交叉应用C将使用B的XML并取消记录的记录
然后在ID和Item上连接Source表是一件小事
示例dbFiddle
Select A.[ID]
,C.*
From YourTable A
Cross Apply ( values (cast((Select A.* for XML RAW) as xml))) B(XMLData)
Cross Apply (
Select Item = xAttr.value('local-name(.)', 'varchar(100)')
,Value = xAttr.value('.','varchar(max)')
From XMLData.nodes('//@*') xNode(xAttr)
Where xAttr.value('local-name(.)','varchar(100)') not in ('Id','Other-Columns','To-Exclude')
) C
Join Source D on A.ID=D.ID and C.Item=D.TargetField
返回
ID Item Value
1 Field1 A
1 Field2 B
2 Field2 C
3 Field1 X
答案 1 :(得分:0)
您可以使用case
表达式:
select s.id,
(case when s.targetfield = 'field1' then r.field1
when s.targetfield = 'field2' then r.field2
end)
from source s join
referenced r
on s.id = r.id;