我需要从存储过程输出数据作为结果集,其中源数据的列表示为输出中的行。我应该为输出中的每一列看到一行,这是在我的源数据中,我应该在输出中看到我的源数据中的每一行的一列。我只是不明白如何使用Pivot或其他我已经看过的方法来完成这个任务。
一旦我有了我喜欢的面向数据的方式,我想我将查询sys.columns,将源数据列名作为输出的第一列注入。我还可能需要预先查询源数据值,这些值将用作输出列名。我设想在我的未来会有一些宏伟的动态SQL,但如果需要的话,我可以自己解决所有这些问题。我主要关注如何将列转换为行。见下文:
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
*/发布于 2017-02-16 16:25:39
假设你需要动力。
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);返回

如果您不需要动态
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]https://stackoverflow.com/questions/42277951
复制相似问题