首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL将列移动到行

SQL将列移动到行
EN

Stack Overflow用户
提问于 2017-02-16 15:19:59
回答 1查看 1.2K关注 0票数 1

我需要从存储过程输出数据作为结果集,其中源数据的列表示为输出中的行。我应该为输出中的每一列看到一行,这是在我的源数据中,我应该在输出中看到我的源数据中的每一行的一列。我只是不明白如何使用Pivot或其他我已经看过的方法来完成这个任务。

一旦我有了我喜欢的面向数据的方式,我想我将查询sys.columns,将源数据列名作为输出的第一列注入。我还可能需要预先查询源数据值,这些值将用作输出列名。我设想在我的未来会有一些宏伟的动态SQL,但如果需要的话,我可以自己解决所有这些问题。我主要关注如何将列转换为行。见下文:

代码语言:javascript
复制
SELECT
     ID
    ,XID
    ,Amount
FROM  (
       SELECT 11 as ID, 301 as XID, 50001 as Amount UNION ALL
       SELECT 12 as ID, 302 as XID, 50002 as Amount UNION ALL
       SELECT 13 as ID, 303 as XID, 50003 as Amount UNION ALL
       SELECT 14 as ID, 304 as XID, 50004 as Amount
    ) T1
/*
The above query returns this:

ID  XID Amount
----------------
11  301 50001
12  302 50002
13  303 50003
14  304 50004


Instead I would like to see this:

Column  11     12     13     14
-----------------------------------
ID      11     12     13     14
XID     301    302    303    304
Amount  50001  50002  50003  50004

*/
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-16 16:25:39

假设你需要动力。

代码语言:javascript
复制
Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName(ID) From Yourtable Order by 1 For XML Path('')),1,1,'') 
Select  @SQL = '
Select [Column],' + @SQL + '
From (
        Select B.*
         From  YourTable A
         Cross Apply (
                      Values (1,''ID''    ,ID,ID)
                            ,(2,''XID''   ,ID,XID)
                            ,(3,''Amount'',ID,Amount)
                     ) B ([Seq],[Column],[Item],[Value])
     ) A
 Pivot (sum(Value) For [Item] in (' + @SQL + ') ) p
 Order By [Seq]
 '
Exec(@SQL);

返回

如果您不需要动态

代码语言:javascript
复制
Select [Column],[11],[12],[13],[14]
From (
        Select B.*
         From  YourTable A
         Cross Apply (
                      Values (1,'ID'    ,ID,ID)
                            ,(2,'XID'   ,ID,XID)
                            ,(3,'Amount',ID,Amount)
                     ) B ([Seq],[Column],[Item],[Value])
     ) A
 Pivot (sum(Value) For [Item] in ([11],[12],[13],[14]) ) p
 Order By [Seq]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42277951

复制
相关文章

相似问题

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