1

参加したい「顧客」と「アクティベーション」の2つのテーブルがあります。それらの構造は次のとおりです。

 CUSTOMER                       Activation
 ------------                  ------------- 
 Id      Name                   EntityId       Date_Created       Type
 1       A                         1               2012            EMAIL
 2       B                         2               2011            SMS
 3       C

ここで、customer.Id = Activation.EntityId でこれら 2 つのテーブルを結合したいと思います。ただし、最終的なテーブル構造を次のようにしたい:

 Id    Name    Date_Email       Date_SMS       

 1      A        2012             NULL
 2      B        NULL             2011

基本的に、列 Date_Email と Date_SMS は両方とも Activation.Date_Created 列から取得されます。Activation.Type が EMAIL の場合、最終結果の Date_Email を Date_created に設定し、Date_SMS を null に設定します。Activation.type が SMS の場合は、別の方法で行います。

私が今持っているのはこれです:

SELECT Customer.Id, Name, Date_Created AS Date_EMail, DATE_Created AS Date_SMS 
from Customer 
inner join Activation ON Customer.Id = Activation.EntityId;

ここで、Activation.Type 列に基づいて If-else 条件を作成する必要があります。私はこれにまったく慣れておらず、グーグルでこれを理解することができませんでした。私はOracle XEデータベースを使用しています

誰かがこれで私を助けることができますか? ありがとう

4

2 に答える 2

3
SELECT Id, Name, A1.Date_Created as Date_Email, A2.Date_Created as Date_SMS FROM
CUSTOMER C
LEFT JOIN Activation A1 ON C.Id=A1.EntityID AND A1.Type='EMAIL'
LEFT JOIN Activation A2 ON C.Id=A2.EntityID AND A1.Type='SMS'

これにより、ID=3 のエンティティも追加されます。ここで、Date_EmailDate_SMSは null です。Oracle の構文がわかりません。次のような方法で ID=3 を削除できます。WHERE NOT (IsNull(Date_Email) && IsNull(Date_SMS))

于 2012-08-31T01:09:07.590 に答える
2

タイプごとに 1 回ずつ、2 回結合する必要があります (NULL を許可するには LEFT JOIN を使用します)。

SELECT Customer.Id, Name, ActEmail.Date_Created AS Date_EMail, ActSMS.DATE_Created AS Date_SMS 
FROM Customer 
LEFT OUTER JOIN Activation AS ActEmail ON Customer.Id = ActEmail.EntityId AND ActEmail.Type = 'EMAIL'
LEFT OUTER JOIN Activation AS ActSMS ON Customer.Id = ActSMS.EntityId AND ActSMS.Type = 'SMS'
于 2012-08-31T01:09:31.913 に答える