2012-05-02 9 views
5

J'ai des difficultés avec ce problème.SQL Split plusieurs colonnes en plusieurs lignes

J'ai une table avec cette structure:

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

J'ai besoin d'une requête SQL pour obtenir un jeu de résultats comme celui-ci:

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

Est-ce possible d'effectuer?

Répondre

6

façon plus simple que je peux penser est (en supposant que vous ne se soucient pas si Tim est répertorié avant ou après Kristy):

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

Si les questions d'ordre, et vous voulez que le gestionnaire d'abord toujours, puis:

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

Bonne réponse, merci! –

0

Essayez quelque chose comme

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

Vous pouvez utiliser UNPIVOT pour cela.

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