SQL将多个列拆分为多个行

Kev*_* M. 5 sql sql-server-2008

我遇到这个问题很困难.

我有一个这种结构的表:

OrderID | Manager   | Worker      
1       | John      | Sally       
2       | Tim       | Kristy       
Run Code Online (Sandbox Code Playgroud)

我需要一个SQL查询来获取这样的结果集:

OrderID | Employee       
1       | John           
1       | Sally    
2       | Tim 
2       | Kristy
Run Code Online (Sandbox Code Playgroud)

这有可能执行吗?

Aar*_*and 6

我能想到的最简单的方法是(假设你不关心Tim是否在Kristy之前或之后被列出):

SELECT OrderID, Employee = Manager FROM dbo.table
UNION ALL
SELECT OrderID, Employee = Worker FROM dbo.table
ORDER BY OrderID;
Run Code Online (Sandbox Code Playgroud)

如果订单很重要,并且您希望经理先行,那么:

SELECT OrderID, Employee FROM
(
  SELECT r = 1, OrderID, Employee = Manager
  FROM dbo.Table
  UNION ALL
  SELECT r = 2, OrderID, Employee = Worker
  FROM dbo.table
) AS x
ORDER BY OrderID, r;
Run Code Online (Sandbox Code Playgroud)