0

我正在尝试为我现在手动执行的操作提供自动化解决方案,而我只有最基本的 SQL 技能。我通常修改其他人已经构建或将构建基本选择查询的简单查询。我已经阅读了一些内容,但不知道在这种情况下如何让它做我需要的。我需要想出一些其他人可以在我外出一个月时使用的东西(这将节省我回来时的时间)。

我需要的是返回下面 tblThree.EndDate 晚于 tblFive.ServiceEnd 的字段。我必须在日期上进行其他一些比较,但如果我得到第一个的有效查询,我可以使它与其他人一起工作。我们使用 MS SQL Server 2008。

我尝试使用别名创建子查询,但在使其工作时惨遭失败。

这些是我正在使用的表和字段:

    tblOne.ServiceID
    tblOne.ServiceYear
    tblOne.Status
    tblTwo.AccountNbr
    tblTwo.AcctName
    tblThree.BeginDate (smalldatetime, null)
    tblThree.EndDate (smalldatetime, null)
    tblFour.ClientID
    tblFour.ServiceName
    tblFive.ContractID
    tblFive.ServiceBegin (smalldatetime, null)
    tblFive.ServiceEnd (smalldatetime, null)

这是表的关联方式:

    tblOne.ServiceID = tblThree.ServiceID
    tblOne.ContractID = tblFive.ContractID
    tblOne.ClientID = tblFour.ClientID
    tblTwo.AccountNbr = tblFour.Account

我使用 MS Access 2003 来生成 Join SQL:

SELECT  tblOne.ServiceID, tblTwo.AccountNbr,
    tblTwo.AcctName, tblFour.ServiceName, tblOne.Status,
    tblThree.BeginDate, tblThree.EndDate,
    tblOne.ServiceYear, tblFive.ServiceBegin,
    tblFive.ServiceEnd

FROM  ((tblTwo INNER JOIN tblFour 
  ON  tblTwo.AccountNbr=tblFour.AccountNbr) INNER JOIN (tblThree INNER JOIN tblOne 
  ON  tblThree.ServiceID=tblOne.ServiceID) 
  ON  tblFour.ClientID=tblOne.ClientID) INNER JOIN tblFive 
  ON  tblOne.ContractID=tblFive.ContractID;

谢谢你的帮助。

4

2 回答 2

0

只需添加一个 WHERE 子句即可开始:

SELECT  tblOne.ServiceID, tblTwo.AccountNbr,
    tblTwo.AcctName, tblFour.ServiceName, tblOne.Status,
    tblThree.BeginDate, tblThree.EndDate,
    tblOne.ServiceYear, tblFive.ServiceBegin,
    tblFive.ServiceEnd

FROM  ((tblTwo INNER JOIN tblFour 
  ON  tblTwo.AccountNbr=tblFour.AccountNbr) INNER JOIN (tblThree INNER JOIN tblOne 
  ON  tblThree.ServiceID=tblOne.ServiceID) 
  ON  tblFour.ClientID=tblOne.ClientID) INNER JOIN tblFive 
  ON  tblOne.ContractID=tblFive.ContractID
WHERE tblThree.EndDate > tblFive.ServiceEnd;
于 2013-07-24T17:58:53.530 回答
0
SELECT
    tblOne.ServiceID,
    tblOne.ServiceYear,
    tblOne.Status,
    tblTwo.AccountNbr,
    tblTwo.AcctName,
    tblThree.BeginDate,
    tblThree.EndDate,
    tblFour.ClientID,
    tblFour.ServiceName,
    tblFive.ContractID,
    tblFive.ServiceBegin,
    tblFive.ServiceEnd
FROM tblOne
INNER JOIN tblThree
ON tblOne.ServiceID = tblThree.ServiceID
INNER JOIN tblFive
ON tblOne.ContractID = tblFive.ContractID
INNER JOIN tblFour
ON tblOne.ClientID = tblFour.ClientID
INNER JOIN tblTwo
ON tblTwo.AccountNbr = tblFour.Account
WHERE tblThree.EndDate > tblFive.ServiceEnd
于 2013-07-24T18:04:56.997 回答