我正在使用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种。有办法吗?
答案 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
快。