首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UNPIVOT表列

UNPIVOT表列
EN

Stack Overflow用户
提问于 2018-04-22 18:48:33
回答 2查看 49关注 0票数 1

我想用行而不是列来获取我的表数据。

也可以动态读取列名。

视觉示例:

代码语言:javascript
复制
ColA    ColB    ColC    ColD
1       2       3       4

对此:

代码语言:javascript
复制
ColA    1
ColB    2
ColC    3
ColD    4
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-22 19:19:19

这种方法将“动态”地卸载数据,而不必实际使用动态SQL或指定所有字段名。

完全披露:Gordon的方法肯定更有表现力。

示例

代码语言:javascript
复制
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

返回

代码语言:javascript
复制
Item    Value
ColA    1
ColB    2
ColC    3
ColD    4
票数 1
EN

Stack Overflow用户

发布于 2018-04-22 19:01:35

我最喜欢的方法是apply

代码语言:javascript
复制
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的好方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49969537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档