У меня есть запрос в SQL Server.Отображать одну строку каждого набора записей столбца с условием
Существует временная таблица #final, как показано ниже
Хочу получать только одну строку каждого проекта, имеющего максимальное EXPECTEDENDDATE.
У меня есть запрос в SQL Server.Отображать одну строку каждого набора записей столбца с условием
Существует временная таблица #final, как показано ниже
Хочу получать только одну строку каждого проекта, имеющего максимальное EXPECTEDENDDATE.
попытка ниже один: -
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 стол, и я не взял все атрибуты, например
Выход: -
Спасибо, что ответили. Он дает мне следующее сообщение об ошибке Msg 8120, Level 16, State 1, Line 944 Столбец # Final.Employeecode недействителен в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY. – Mandy
Oh !, Извините, поместите оба атрибута в Group By во внутреннем запросе, например Group By EmployeeCode, ProjectCode –
. Я ценю ваш ответ. Здесь я получаю все записи одного проекта. Мне нужно это только для проекта Praetorian Track Off, так как он повторил дату начала. Он должен отображать только одну запись, у которой больше ОЖИДАЕТСЯENDDATE, все проекты должны отображаться как есть. – Mandy
Вы попробовали любой запрос? –
Да, но я получаю запись только одного проекта. Я хочу отображать все записи проекта, и здесь особое условие заключается в том, что для проекта «Преторианский трек» EXPECTEDSTARTDATE повторяется, поэтому он должен отображать только одну запись с самым высоким ОЖИДАЕМЫМENDDATE. – Mandy