我想用行而不是列来获取我的表数据。
也可以动态读取列名。
视觉示例:
ColA ColB ColC ColD
1 2 3 4对此:
ColA 1
ColB 2
ColC 3
ColD 4发布于 2018-04-22 19:19:19
这种方法将“动态”地卸载数据,而不必实际使用动态SQL或指定所有字段名。
完全披露:Gordon的方法肯定更有表现力。
示例
Select C.*
From YourTable A
Cross Apply ( values (cast((Select A.* for XML RAW) as xml))) B(XMLData)
Cross Apply (
Select Item = a.value('local-name(.)','varchar(100)')
,Value = a.value('.','varchar(max)')
From B.XMLData.nodes('/row') as C1(n)
Cross Apply C1.n.nodes('./@*') as C2(a)
Where a.value('local-name(.)','varchar(100)') not in ('Colums','To_Exclude')
) C返回
Item Value
ColA 1
ColB 2
ColC 3
ColD 4发布于 2018-04-22 19:01:35
我最喜欢的方法是apply
select v.*
from t cross apply
(values ('colA', t.colA), ('colB', t.colb), ('colC', t.colc), ('colD', t.cold)
) v(which, val);从技术上讲,apply实现了横向连接。这是非常强大的;unpivot只是它可以完成的许多事情之一。然而,unpivot是开始学习apply的好方法。
https://stackoverflow.com/questions/49969537
复制相似问题