2

アクション テーブルに各デバイスの複数のレコードが含まれている可能性がある 2 つのテーブルがあります。アクション テーブルに 3 つの値のみが存在するかどうかをテストし、既存の Oracle データベースを使用してプライマリ テーブル レコードと共にそれらの値を別々の列に返すクエリをテスト作成する必要があります。

テーブル構造は次のとおりです。

Table_Device
Objid......desc
1........
device1 2........device2

Table_Action
ObjiD...Action...Action2Device
1........A........1
2........B. …………1
3…………A…………2
4…………C. .........2
5........D........2

(Action2Device は Table_Device.Objid へのリンクに等しい)

考えられるアクションは多数ありますが、私は A、B、および C にのみ関心があります。次のようなレポートを生成できるようにしたいと考えています。

desc.....ActionA....ActionB...ActionC device1
.. .A................B Device2
...A....... .........................C

左結合を作成できましたが、アクション レコードごとにデバイスが繰り返されます。上記のように、この結果を生成する SQL クエリを作成する方法について何か提案はありますか?

4

2 に答える 2

1

このSQLフィドルを見てください

左結合は必要ありませんCASE。ステートメントを使用して追加の列を作成しただけです。

SELECT D.Name
       ,MAX(CASE WHEN A.Action = 'A' THEN 'A' ELSE NULL END) AS ActionA
       ,MAX(CASE WHEN A.Action = 'B' THEN 'B' ELSE NULL END) AS ActionB
       ,MAX(CASE WHEN A.Action = 'C' THEN 'C' ELSE NULL END) AS ActionC
FROM   TABLE_DEVICE D
INNER JOIN
       Table_Action A
ON     A.Action2Device = D.Objid
GROUP BY
       D.Name
于 2013-05-07T22:20:13.533 に答える
0

Oracle 11g では、これも実行できます。

with t as 
(select  a.device,b.action
 from table_device a join table_action b 
 on a.objid=b.action2device)
select * 
from t
pivot (MAX(ACTION)
       for action
       in ('A' AS ACTIONA,'B' AS ACTIONB,'C' AS ACTIONC)) 

http://www.sqlfiddle.com/#!4/39f97/11

于 2013-05-08T03:13:55.543 に答える