1

我有两个表“客户”和“激活”,我想加入。以下是它们的结构:

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

现在,我想在 customer.Id = Activation.EntityId 上加入这两个表。但是,我希望我的最终表结构是这样的:

 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为空。我不知道 Oracle 的语法,你可以删除 ID=3 类似WHERE NOT (IsNull(Date_Email) && IsNull(Date_SMS))

于 2012-08-31T01:09:07.590 回答
2

您需要加入两次,每种类型一次(并使用 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 回答