2017-06-15 18 views
-1

このテーブルからこれらの結果をどのように取得できますか?私はそれが組合であるか、私がやっていなければならないことに完全には分からない。どんな助けでも大歓迎です。SQLテーブル自己結合(または連合?)問題

WorkOrderID Activity  PlannedDuration ActualDuration 
11   Activity 1 4     3.5 
11   Activity 2 4     3.6 
11   Activity 3 4     5 
11   Activity 4 8     7.2 
11   Activity 5 6     6 
22   Activity 1 4     3.5 
22   Activity 2 4     4 
22   Activity 3 4     3.9 
22   Activity 4 8     12 
22   Activity 6 3     3 

結果

Activity  ActualDuration11 ActualDuration22 
Activity 1  3.5     3.5 
Activity 2  3.6     4 
Activity 3  5     3.9 
Activity 4  7.2     12 
+1

ピボットの使用は多分ですか? – Hackerman

+0

私は適切な列を決定するために、ケース・バイ・ケース・ステートメントを使ってGroup Byを考えていました。 'WorkOrderID'には11と22しかありませんか? –

答えて

0

同じテーブルの2つの文を結合することで、これを達成できます。クエリは次のようになります。

SELECT * FROM 
    (SELECT Activity, PlannedDuration, ActualDuration as ActualDuration11 
    FROM YOUR_TABLE 
    WHERE WorkOrderID = 11) t1 
JOIN 
    (SELECT Activity, PlannedDuration, ActualDuration as ActualDuration22 
    FROM YOUR_TABLE 
    WHERE WorkOrderID = 22) t2 
     ON t1.Activity = t2.Activity; 
+0

ありがとうございます!素晴らしい仕事! – dbreienrk1

0

はこれを試してみてください:

select foo.Activity, foo.ActualDuration as ActualDuration11, foobar.ActualDuration as ActualDuration22 
from (select Activity, ActualDuration from TABLENAME where WorkOrderID = 11) as foo 
join (Select Activity, ActualDuration from TABLENAME where WorkOrderID = 22) as foobar on (foo.Activity = foobar.Activity); 

それは参加し使用しています。実際のデータベースでうまく動作させるには、それを微調整する必要があるかもしれませんが、これは良いフレームワークになるはずです。私のテストケースで

、上記のクエリは次のように返さ:

Activity | ActualDuration11 | ActualDuration12 
------------+------------------+----------------- 
Activity 1 | 3.5   | 3.5 
Activity 2 | 3.6   | 4 
Activity 3 | 5    | 3.9 
(3 rows) 

はそれが役に立てば幸い!