2012-02-13 55 views
0

我要创建的报告显示了在指定日期范围内发送特定类型的信件('212')的案例列表。试图从另一个表中提取最新日期

目前,我有几个联接回事衬托出我的其他列,但我有与问题的区域是,当我尝试加入“文档”表与“案例”表。在我加入加入每种情况下是唯一的,但只要我参加“文档”表有因为“文档”表有每个正在创建这封信的许多实例中的相同情况下的多个实例案件。我只需要提供该信的最新创建日期。


选择

[casCaseID] as [Case ID], 
    [cliForename] + [clisurname] as [Client Name], 
    [rusFullname] as [Adviser Name], 
    [docDateCreated] as [Date EA Letter Sent], 
    [camloan],  
    CASE 
     WHEN isnull(camLoan,0) = 0 or isnull(campurchaseprice,0) = 0 THEN 0 
     ELSE [camLoan]/[campurchaseprice] 
     END as 'Loan To Value %' 


FROM [MPS3].[dbo].[Cases] 
inner join [MPS3].[dbo].[Clients] on casPrimaryClientID=cliClientID 
inner join [MPS3].[dbo].[RefUsers] on casAdviserID=rusUserID 
inner join [MPS3].[dbo].[RefSources] on casSourceID=rsoSourceID 
inner join [MPS3].[dbo].[CasesMortgage] on casCaseID=camCaseID 
inner join [MPS3].[dbo].[Documents] on casCaseID=docCaseID and docLetterID =212 
where docDateCreated between @fromDate and @toDate 

我使用子查询试图在内部与 'MAX',但无济于事加入。

inner join [MPS3].[dbo].[Documents] 
on casCaseID=docCaseID 
and docLetterID =212 
and docdatecreated = (select max(docdatecreated) 
         from [MPS3].[dbo].[Documents] 
         where casCaseID=docCaseID 
         group by cascaseid) 

任何想法,我哪里出错了?

谢谢!

回答

2
SELECT  
    [casCaseID] as [Case ID], 
    [cliForename] + [clisurname] as [Client Name], 
    [rusFullname] as [Adviser Name], 
    MAX([docDateCreated]) as [Date EA Letter Sent], 
    [camloan],  
    CASE 
     WHEN isnull(camLoan,0) = 0 or isnull(campurchaseprice,0) = 0 THEN 0 
     ELSE [camLoan]/[campurchaseprice] 
     END as 'Loan To Value %' 

FROM [MPS3].[dbo].[Cases] 
inner join [MPS3].[dbo].[Clients] on casPrimaryClientID=cliClientID 
inner join [MPS3].[dbo].[RefUsers] on casAdviserID=rusUserID 
inner join [MPS3].[dbo].[RefSources] on casSourceID=rsoSourceID 
inner join [MPS3].[dbo].[CasesMortgage] on casCaseID=camCaseID 
inner join [MPS3].[dbo].[Documents] on casCaseID=docCaseID and docLetterID =212 
where docDateCreated between @fromDate and @toDate 
GROUP BY 
    [casCaseID], 
    [cliForename] + [clisurname], 
    [rusFullname], 
    [camloan],  
    CASE 
     WHEN isnull(camLoan,0) = 0 or isnull(campurchaseprice,0) = 0 THEN 0 
     ELSE [camLoan]/[campurchaseprice] 
     END 
+0

谢谢安德鲁,那工作完美。我要检查一下,看看有什么改变。 再次感谢! – TJH 2012-02-13 16:38:51

+0

我应该解释。我添加了一个GROUP BY子句。它看起来坏坏地包括在两块地的大CASE语句,但它被缓存,所以没有那么糟糕。 – Andrew 2012-02-13 17:01:15

+0

不用担心,这是非常好的东西。我无法相信我还没有尝试过。我已经将它保存以备将来使用! 所有最优秀的 添 – TJH 2012-02-13 17:10:58

0

你可以这样做:

[casCaseID] as [Case ID], 
[cliForename] + [clisurname] as [Client Name], 
[rusFullname] as [Adviser Name], 
(select max(docdatecreated) 
        from [MPS3].[dbo].[Documents] 
        where casCaseID=docCaseID 
         and docDateCreated between @fromDate and @toDate 
        group by cascaseid) 
    as [Date EA Letter Sent], 
[camloan],  
CASE 
    WHEN isnull(camLoan,0) = 0 or isnull(campurchaseprice,0) = 0 THEN 0 
    ELSE [camLoan]/[campurchaseprice] 
    END as 'Loan To Value %' 

FROM [MPS3].[dbo].[Cases] 
inner join [MPS3].[dbo].[Clients] on casPrimaryClientID=cliClientID 
inner join [MPS3].[dbo].[RefUsers] on casAdviserID=rusUserID 
inner join [MPS3].[dbo].[RefSources] on casSourceID=rsoSourceID 
inner join [MPS3].[dbo].[CasesMortgage] on casCaseID=camCaseID 
inner join [MPS3].[dbo].[Documents] on casCaseID=docCaseID and docLetterID =212 
3

在您与MAX()加入,尝试添加同一领域的检查是在加入。

inner join [MPS3].[dbo].[Documents] 
    on casCaseID=docCaseID 
    and docLetterID =212 
    and docdatecreated = (select max(docdatecreated) 
          from [MPS3].[dbo].[Documents] 
         where casCaseID = docCaseID 
          and docLetterID = 212) 
相关问题