Попытка вытащить последнюю дату из другой таблицы - PullRequest
0 голосов
/ 13 февраля 2012

В отчете, который я создаю, показан список случаев, когда им отправлялось письмо определенного типа ( '212' ) в течение указанного диапазона дат.

В настоящее время у меня есть несколько объединений, чтобы вывести мои дополнительные столбцы, но у меня возникает проблема, когда я пытаюсь присоединиться к таблице "Документы" с «Шкафы» Таблица.Прежде чем добавить соединение, каждый случай уникален, однако, как только я присоединяюсь к таблице «Документы» , возникает несколько экземпляров одного и того же случая, поскольку в таблице «Документы» естьмного экземпляров этого письма создаются в каждом случае.Мне просто нужно сообщить последнюю дату создания этого письма.


SELECT

  [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)

Есть идеи, где я ошибаюсь?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 13 февраля 2012

При соединении с 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) 
2 голосов
/ 13 февраля 2012
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 голосов
/ 13 февраля 2012

Вы можете сделать это:

[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  
...