2012-05-02 64 views
5

Tengo dificultades con este problema.SQL dividir varias columnas en varias filas

Tengo una tabla con esta estructura:

OrderID | Manager | Worker  
1  | John  | Sally  
2  | Tim  | Kristy  

necesito una consulta SQL para obtener un conjunto de resultados como esto:

OrderID | Employee  
1  | John   
1  | Sally  
2  | Tim 
2  | Kristy 

Es esto posible para llevar a cabo?

Respuesta

6

manera más simple que puedo pensar es (asumiendo que no importa si Tim aparece antes o después de Kristy):

SELECT OrderID, Employee = Manager FROM dbo.table 
UNION ALL 
SELECT OrderID, Employee = Worker FROM dbo.table 
ORDER BY OrderID; 

si las cosas de orden, y desea que el administrador siempre primero, entonces:

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; 
+0

¡Gran respuesta, gracias! –

0

intentar algo así como

SELECT OrderID, Manager AS Employee, 'Manager' AS EmployeeRole From Employess 
UNION ALL 
SELECT OrderID, Worker AS Employee, 'Worker' AS EmployeeRole From Employess 
4

Usted puede utilizar UNPIVOT para esto.

SELECT p.OrderID, p.Employee 
FROM (SELECT OrderID, Manager, Worker FROM table) a 
UNPIVOT (Employee FOR FieldName IN (Manager, Worker)) p