SQL Server:将列转换为另一列中的新行

时间:2019-02-26 17:16:03

标签: sql sql-server

我正在使用SQL Server 2014,并且具有以下数据:

Owner|    Full Name|    Revenue|
--------------------------------
John      Jane          1000
Nancy     Ginger        2000
Sanya     Brian         3000

我希望进行重组,以便每个人都列在全名下,以及他们的收入,如下所示:

Full Name|    Revenue|
----------------------
Jane          1000
Ginger        2000
Brian         3000
John          1000
Nancy         2000
Sanya         3000

我可以通过创建2个单独的视图然后进行联合来轻松地做到这一点-但必须有一种方法可以在一个视图中做到这一点-而不是2种。有办法吗?

2 个答案:

答案 0 :(得分:3)

您想要unpivot

SELECT tt.*
FROM table t CROSS APPLY
     ( VALUES ([Full Name], [Revenue], 2), ([Owner], [Revenue], 1) 
     ) tt ([Full Name], [Revenue], seq)
ORDER BY seq;

答案 1 :(得分:1)

您可以在1个视图中使用UNION ALL

CREATE VIEW vwRevenues AS
SELECT [Full Name], Revenue
FROM YourTable
UNION ALL
SELECT Owner, Revenue
FROM YourTable;

或者这个:

CREATE VIEW vwRevenues AS
SELECT v.[Full Name], t.Revenue
FROM YourTable t
OUTER APPLY (VALUES ([Full Name]), (Owner)) v([Full Name]);

但是我不确定APPLY方法在视图中使用时实际上是否比UNION ALL快。