2017-09-28 8 views
0

テーブルが3つあるとします。transactioncust_type_1cust_type_2です。データに応じてoracleに参加するテーブルを選択してください

Transaction 
Cust_type char - type of customer which can be 1 or 2 
Cust_id number - id from their respective table i.e. cust_type_1 and cust_type2 
Amount number - amount 

    Cust_type_1 
ct1_id number - id(pk) 
ct1_name varchar - customer name 


    Cust_type_2 
ct2_id number - id(pk) 
ct2_name varchar - customer name 

ここでは名前と量のみが表示されるビューを作成したいと考えています。

select COND_JOINED_TABLE_ALIAS.name,t.amount 
from transaction t 
join case when t.type = 1 JOIN CUST_TYPE_1 
     else JOIN CUST_TYPE_2 END AS COND_JOINED_TABLE_ALIAS 

どのようにデータのタイプに基づいて条件付き結合を達成できますか。 はい、このユースケースを避けるためのより良い構造があるかもしれません。しかし、これは単なる例です。 ご協力いただければ幸いです。

答えて

1

あなたは直接選択であなたのケースを実行する必要があります。

SELECT 
    CASE 
    WHEN t.type=1 
    THEN cust1.ct1_name 
    ELSE cust2.ct2_name 
    END AS Customer_name , 
    t.amount 
FROM transaction t 
JOIN Cust_type_1 cust1 
ON t.Cust_id = cust1.ct1_id 
JOIN Cust_type_2 cust2 
ON t.Cust_id = cust2.ct2_id; 
+0

を使用することができる私はむしろ、内側よりも参加それは外側のままにしておく必要があり信じ上記のクエリの両方に存在しないtransaction.cust_id値のレコードが得られないだろうとして参加cust_type_1およびcust_type_2テーブル –

1

スニペット以下の希望に役立ちます。 SQL以下

SELECT 
    CASE 
    WHEN T.TYPE = 1 
    THEN 
     (SELECT CTL_NAME FROM CUST_TYPE_1 A WHERE T.CUST_ID = A.CTL_ID 
    ) 
    WHEN T.TYPE = 2 
    THEN 
     (SELECT CTL_NAME FROM CUST_TYPE_2 B WHERE T.CUST_ID = B.CTL_ID 
    ) 
    END nme, 
    T.AMOUNT 
FROM transaction t; 
0

SELECT 
    CASE t.cust_type 
     WHEN 1 THEN c1.ct1_name 
     WHEN 2 THEN c2.ct2_name 
    END 
AS cust_name, 
t.amount 
FROM 
transaction t 
LEFT JOIN cust_type_1 c1 ON t.cust_id = c1.ct1_id 
LEFT JOIN cust_type_2 c2 ON t.cust_id = c2.ct2_id 
関連する問題