5

私はこの問題に苦労しています。

この構造のテーブルがあります:

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

次のような結果セットを取得するには、SQL クエリが必要です。

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

これは実行可能ですか?

4

3 に答える 3

6

私が考えることができる最も簡単な方法は次のとおりです (Tim が Kristy の前または後にリストされているかどうかは気にしないと仮定して):

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

順序が重要で、常にマネージャーが最初に必要な場合は、次のようにします。

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;
于 2012-05-02T14:40:59.170 に答える
4

これには UNPIVOT を使用できます。

SELECT p.OrderID, p.Employee
FROM (SELECT OrderID, Manager, Worker FROM table) a
UNPIVOT (Employee FOR FieldName IN (Manager, Worker)) p
于 2012-05-02T14:43:13.660 に答える
0

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

SELECT OrderID, Manager AS Employee, 'Manager' AS EmployeeRole From Employess
UNION ALL
SELECT OrderID, Worker AS Employee, 'Worker' AS EmployeeRole From Employess
于 2012-05-02T14:42:50.227 に答える