2012-05-02 38 views
5

Mam problem z tym problemem.SQL Podział wielu kolumn na wiele wierszy

Mam tabeli z tej struktury:

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

Potrzebuję zapytanie SQL, aby uzyskać wynik ustawić tak:

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

to jest możliwe do wykonania?

Odpowiedz

6

Najprostszy sposób mogę myśleć to (zakładając, że nie obchodzi mnie, czy Tim jest wymieniony przed Kristy lub po):

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

jeśli sprawy porządku, a chcesz menedżera zawsze pierwszy, a następnie:

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

Świetna odpowiedź, dziękuję! –

0

spróbować czegoś jak

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

można użyć UNPIVOT do tego.

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