Hi Dan,
Please give this a try. It's not tested, because I don't have any projects in my testadministration:
Declare @TMP_ORDR TABLE (CardCode NVARCHAR(30), FirstProject nvarchar(20), LastProject nvarchar(20), DocEntry int, MinDate date, MaxDate date, MinDocEntry int, MaxDocEntry int)
INSERT INTO @TMP_ORDR
(CardCode, DocEntry, FirstProject, LastProject, MinDate, MaxDate)
SELECT CardCode, Count(DocEntry), min(Project), max(project), min(DocDate), Max(DocDate) FROM ORDR with(NOLOCK) WHERE CANCELED='N'
GROUP BY CardCode
UPDATE A
SET A.MinDocEntry=(SELECT min(B.DocEntry) FROM ORDR B with(NOLOCK) WHERE B.DocDate=A.MinDate and B.CardCode=A.CardCode and B.CANCELED='N')
, A.MaxDocEntry=(SELECT max(B.DocEntry) FROM ORDR B with(NOLOCK) WHERE B.DocDate=A.MaxDate and B.CardCode=A.CardCode and B.CANCELED='N')
, FirstProject = (SELECT min(B.Project) FROM ORDR B with(NOLOCK) WHERE B.Project = A.FirstProject And B.CardCode = A.CardCode and B.CANCELED = 'N')
, LastProject = (SELECT max(B.Project) FROM ORDR B with(NOLOCK) WHERE B.Project = A.LastProject And B.CardCode = A.CardCode and B.CANCELED = 'N')
FROM @TMP_ORDR A
SELECT A.DocEntry as [Nr orders], A.CardCode, D.CardName, A.MinDate as [First Order Date], B.DocNum as [First Ordernr.], E.PrjName, B.DocTotal as [First OrderAmnt], A.MaxDate as [Last order date], C.DocNum as [Last Ordernr.], F.PrjName, C.DocTotal as [Last order amnt]
FROM @TMP_ORDR A
INNER JOIN (SELECT DocEntry, DocNum, DocTotal FROM ORDR with(NOLOCK)) B ON A.MinDocEntry=B.DocEntry
INNER JOIN (SELECT DocEntry, DocNum, DocTotal FROM ORDR with(NOLOCK)) C ON A.MaxDocEntry=C.DocEntry
INNER JOIN OCRD D with(NOLOCK) ON A.CardCode=D.CardCode
LEFT JOIN OPRJ E on A.FirstProject = E.PrjCode
LEFT JOIN OPRJ F on A.LastProject = F.PrjCode
ORDER BY A.CardCode
Kind regards,
Andy Grootens
Asecom