Вы можете использовать Common Table Expression
, CASE
и MAX()
:
CREATE TABLE #Temp
(
Id INT
,Code VARCHAR(10)
,TDate DATE
,Amount NUMERIC(18,2)
);
INSERT INTO #Temp
VALUES
(1,'A01','11/23/2018',100.20)
,(2,'A02','10/25/2018', 20.20)
,(3,'B01','11/24/2018', 10.10)
,(4,'C01','11/25/2018', 22.12)
,(4,'D01','11/21/2018', 22.12);
WITH CTE AS
(
SELECT Id
,CASE WHEN Code IN ('A01','A02') THEN TDate ELSE NULL END LATEST_DT_A
,CASE WHEN Code IN ('B01','C01','D01') THEN TDate ELSE NULL END LATEST_DT_X
FROM #Temp
)
SELECT MIN(Id) Id
,MAX(LATEST_DT_A) LATEST_DT_A
,MAX(LATEST_DT_X) LATEST_DT_X
FROM CTE
или просто CASE
и MAX()
SELECT MIN(Id) Id
,MAX(CASE WHEN Code IN ('A01','A02') THEN TDate ELSE NULL END) LATEST_DT_A
,MAX(CASE WHEN Code IN ('B01','C01','D01') THEN TDate ELSE NULL END) LATEST_DT_X
FROM #Temp