2013-06-03 28 views
-1

我需要跟踪销售人员及其步骤。我有两个表前景和活动。获得唯一生活

这里是SQL: 的Sql小提琴这里:http://sqlfiddle.com/#!2/413e1c

CREATE TABLE `Prospects` (
    `ID` INT NOT NULL AUTO_INCREMENT , 
    `Name` VARCHAR(45) NULL , 
    PRIMARY KEY (`ID`)); 

INSERT INTO `Prospects` (`Name`) VALUES ('Tom'); 
INSERT INTO `Prospects` (`Name`) VALUES ('Dick'); 
INSERT INTO `Prospects` (`Name`) VALUES ('Harry'); 
INSERT INTO `Prospects` (`Name`) VALUES ('Oscar'); 


CREATE TABLE `Activity` (
    `ID` INT NOT NULL AUTO_INCREMENT, 
    `Prospect_ID` INT NULL , 
    `Active` VARCHAR(45) NULL , 
    `Step` VARCHAR(45) NULL , 
    PRIMARY KEY (`ID`)); 

INSERT INTO `Activity` (`Prospect_ID`, `Active`, `Step`) VALUES ('1', 'Yes', 'Call'); 
INSERT INTO `Activity` (`Prospect_ID`, `Active`, `Step`) VALUES ('1', 'No', 'Mail'); 
INSERT INTO `Activity` (`Prospect_ID`, `Active`, `Step`) VALUES ('2', 'No', 'Call'); 
INSERT INTO `Activity` (`Prospect_ID`, `Active`, `Step`) VALUES ('3', 'Yes', 'Mail'); 

我所寻找的是每个前景开放活动。如果激活=否,那么应该排除它。

ID Prospect Status 
1  Tom   Call 
2  Dick  -None- 
3  Harry  Mail 
4  Oscar  -None- 

林停留在两点

1.No记录数据。
2.在我的相关文件中搜索。

よろしくお愿い!

+0

我不明白你的“两分”。只是为了澄清,你想要一个查询返回你发布的样本数据?到目前为止,你对SELECT语句有什么看法? – showdev

+0

因使用汉字而摔倒两次? – JVMX

+0

我怀疑这是使用汉字。可能更多的是缺乏清晰度或不回答问题。 – showdev

回答

1

您应该能够使用LEFT得到的结果JOIN和放置过滤器Active = 'yes'在JOIN,而不是一个WHERE子句。然后你可以使用COALESCE来代替null值:

select p.id, p.name, 
    coalesce(a.step, '-None-') Status 
from prospects p 
left join activity a 
    on p.id = a.prospect_id 
    and a.active = 'Yes'; 

SQL Fiddle with Demo

+0

我建议将JOIN更改为'INNER JOIN'以排除其中'active ='no''的记录。或者,使用'WHERE a.active!='No''而不是将其放入连接中。 http://sqlfiddle.com/#!2/fe0277/6 – showdev

+0

@showdev如果你使用内部联接,那么它将只返回两个表中存在的行,所以Oscar不会出现在最终结果中。以上将给出OP要求的期望结果,它将列出所有前景。 – Taryn

+0

但是OP只想列出那些'active!='no''的前景。 “如果有效=否,则应该排除。”我误解了吗? – showdev