2012-05-02 24 views
5

Ho riscontrato difficoltà con questo problema.SQL suddivisione di più colonne in righe multiple

Ho una tabella con questa struttura:

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

ho bisogno di una query SQL per ottenere un set di risultati come questo:

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

È questo possibile effettuare?

risposta

6

più semplice modo mi viene in mente è (a patto che non importa se Tim è elencato prima Kristy o dopo):

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

se le cose di ordine, e si desidera direttore prima sempre, poi:

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

Ottima risposta, grazie! –

0

provare qualcosa di simile

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

È possibile utilizzare UNPIVOT per questo.

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