2012-05-02 16 views
5

Tôi đang gặp khó khăn với vấn đề này.SQL chia nhiều cột thành nhiều hàng

Tôi có một bảng với cấu trúc này:

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

Tôi cần một truy vấn SQL để có được một kết quả như sau:

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

Đây có phải là có thể thực hiện?

Trả lời

6

đơn giản nhất cách tôi có thể nghĩ đến là (giả sử bạn không quan tâm nếu Tim được liệt kê trước hoặc sau Kristy):

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

Nếu vấn đề trật tự, và bạn muốn quản lý đầu tiên luôn, sau đó:

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

Câu trả lời hay, cảm ơn! –

0

Hãy thử một cái gì đó giống như

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

Bạn có thể sử dụng UNPIVOT cho việc này.

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