我正在构建一个查询,我需要从MEMBERS表中检索所有记录,其中连接日期(datejoin)在两个日期之间,某个成员资格类型(mtypeid)之一和从一个特定的位置(siteid)。需要SQL逻辑可能子查询需要
然后,我需要从SCSCHEDULER(此表存储所有约会)表中撤回所有预定过去某个日期的成员的约会,具有某种类型的约会,并且仍然是活性。
我有以下,但我相信我需要在子查询中放置一些这种逻辑,因为我只为具有约会的成员返回数据。我需要至少为没有任何约会的成员以及那些有约会的成员和scscheduler数据从成员表中返回数据。
SELECT MEMBERS.scancode, MEMBERS.lname, MEMBERS.fname, MEMBERTYPES.description, MEMBERS.status, MEMBERS.datejoin, EMPLOYEES.lname AS Expr1,
EMPLOYEES.fname AS Expr2, SCSCHEDULES.scheduledatefrom, SCSCHEDULES.timeduration, SCSCHEDULES.scheduledescription,
SCSCHEDULES.schedulestatus
FROM MEMBERS LEFT OUTER JOIN
SCSCHEDULES ON MEMBERS.memid = SCSCHEDULES.memid INNER JOIN
MEMBERTYPES ON MEMBERS.mtypeid = MEMBERTYPES.mtypeid INNER JOIN
EMPLOYEES ON MEMBERS.employeeid = EMPLOYEES.employeeid
WHERE (MEMBERS.datejoin BETWEEN @rvStartDate AND @rvEndDate) AND (MEMBERS.siteid = '779') AND (MEMBERS.mtypeid = '1' OR
MEMBERS.mtypeid = '10' OR
MEMBERS.mtypeid = '12' OR
MEMBERS.mtypeid = '28' OR
MEMBERS.mtypeid = '32' OR
MEMBERS.mtypeid = '33' OR
MEMBERS.mtypeid = '34' OR
MEMBERS.mtypeid = '35' OR
MEMBERS.mtypeid = '36' OR
MEMBERS.mtypeid = '40' OR
MEMBERS.mtypeid = '48') AND (SCSCHEDULES.scheduledatefrom >= @rvStartDate) AND (SCSCHEDULES.scheduledescription = 'First' OR
SCSCHEDULES.scheduledescription = 'Second') AND (SCSCHEDULES.schedulestatus = '1')
注意@Merlin,你可以通过使用IN()来缩短你的'WHERE MEMEBER.mtypeid = ...或...'。打字少了很多。 https://msdn.microsoft.com/en-us/library/ms177682.aspx – scsimon