获得唯一的生活

时间:2013-06-03 22:42:05

标签: mysql

我需要跟踪销售人员及其步骤。我有两张表Prospects and Activity。

这是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');

我正在寻找的是每个潜在客户的开放活动。如果Active = No,则应排除它。

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

我坚持两点

1.没有记录数据。
2.搜索我的相关文件。

よろしくお愿い!

1 个答案:

答案 0 :(得分: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