2012-05-02 19 views
5

この問題には問題があります。 SQL複数の列を複数の行に分割する

は、私がこのような構造を持つテーブルを持っている:

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

はこれが行うことが可能である:

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

は、私はこのような結果セットを取得するために、SQLクエリを必要としますか?その後、

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

順序が重要であれば、あなたは最初に、常にマネージャーをしたい、::

答えて

6

私は考えることができる最も簡単な方法は、(ティムは、クリスティの前または後に表示されている場合、あなたが気にしないと仮定した場合)され

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

偉大な答え、ありがとうございます! –

0

は、あなたがこのためにUNPIVOTを使用することができます

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

のようなものを試してみてください。

SELECT p.OrderID, p.Employee 
FROM (SELECT OrderID, Manager, Worker FROM table) a 
UNPIVOT (Employee FOR FieldName IN (Manager, Worker)) p 
関連する問題