2015-07-16 2 views
0

У меня есть запрос в SQL Server.Отображать одну строку каждого набора записей столбца с условием

Существует временная таблица #final, как показано ниже

enter image description here

Хочу получать только одну строку каждого проекта, имеющего максимальное EXPECTEDENDDATE.

+0

Вы попробовали любой запрос? –

+0

Да, но я получаю запись только одного проекта. Я хочу отображать все записи проекта, и здесь особое условие заключается в том, что для проекта «Преторианский трек» EXPECTEDSTARTDATE повторяется, поэтому он должен отображать только одну запись с самым высоким ОЖИДАЕМЫМENDDATE. – Mandy

ответ

1

попытка ниже один: -

Select f1.* 
From #Final As f1 With (Nolock) 
     Join 
     (
      Select Max(EXPECTEDENDDATE) As EXPECTEDENDDATE 
        ,EmployeeCode 
        ,ProjectCode 
      From #Final As t With (Nolock) 
      Group By t.EmployeeCode 
        ,t.ProjectCode 
     ) As f On f1.EmployeeCode = f.EmployeeCode 
       And f1.ProjectCode = f.ProjectCode 
       ANd f1.EXPECTEDENDDATE = f.EXPECTEDENDDATE 

Update

Declare @final Table 
(
    EmployeeCode   Int 
    ,ProjectName   Varchar(500) 
    ,ExpectedStartDate  Date 
    ,ExpectedEndDate  Date 
    ,DaysAllocated   Int 
) 

Declare @SameStartProjects Table 
(
    EmployeeCode   Int 
    ,ProjectName   Varchar(500) 
    ,RowNum     BigInt 
) 

Insert Into @final(EmployeeCode,ProjectName,ExpectedStartDate,ExpectedEndDate,DaysAllocated) Values 
(1149,'INT-Vibrant Web','2015-04-22','2015-05-21',14) 
,(1149,'INT-Vibrant Web','2015-05-22','2015-05-31',6) 
,(1149,'Praetorian Track Off','2015-03-19','2015-05-22',15) 
,(1149,'Praetorian Track Off','2015-03-19','2015-06-11',20) 
,(1149,'RPost Phase ||','2015-05-01','2015-05-31',20) 

Insert Into @SameStartProjects(EmployeeCode,ProjectName,RowNum) 
Select p.EmployeeCode 
     ,p.ProjectName 
     ,Row_Number() Over(Partition By p.ExpectedStartDate Order By p.ExpectedStartDate) As RowNum 
From @final As p 


Select s.* 
From @final As s 
     Join 
     (
      Select f.EmployeeCode 
        ,f.ProjectName 
        ,f.ExpectedStartDate 
        ,Max(f.ExpectedEndDate) As ExpectedEndDate 
        ,Max(sp.RowNum) As RowNum 
      From @final As f 
        Join @SameStartProjects As sp On f.EmployeeCode = sp.EmployeeCode 
          And f.ProjectName = sp.ProjectName 
      Group By f.EmployeeCode 
        ,f.ProjectName 
        ,f.ExpectedStartDate 
     ) As f On s.EmployeeCode = f.EmployeeCode 
      And s.ProjectName = f.ProjectName 
      And s.ExpectedEndDate = f.ExpectedEndDate 

выше, @final ваш #final стол, и я не взял все атрибуты, например

Выход: -

enter image description here

+0

Спасибо, что ответили. Он дает мне следующее сообщение об ошибке Msg 8120, Level 16, State 1, Line 944 Столбец # Final.Employeecode недействителен в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY. – Mandy

+0

Oh !, Извините, поместите оба атрибута в Group By во внутреннем запросе, например Group By EmployeeCode, ProjectCode –

+0

. Я ценю ваш ответ. Здесь я получаю все записи одного проекта. Мне нужно это только для проекта Praetorian Track Off, так как он повторил дату начала. Он должен отображать только одну запись, у которой больше ОЖИДАЕТСЯENDDATE, все проекты должны отображаться как есть. – Mandy

Смежные вопросы