--== SAMPLE DATASELECT StudID, RollNoINTO #tableAFROM (VALUES('Alpha','D1234'),('beta','A1122'),('charlie','D1234'),('bravo','C1342'), ('tom','B1964'),('harry','A1122'))a(StudID, RollNo);--== SAMPLE DATASELECT RollNo, SubjectCodeINTO #tableBFROM (VALUES('D1234',1001),('A1122',4001),('D1234',2001),('C1342',5001),('B1964',6001), ('A1122',3001))a(RollNo, SubjectCode);--== ACTUAL SOLUTIONSELECT tblA.StudID, tblA.RollNo, subQuery.SubjectCodeFROM #tableA tblACROSS APPLY (SELECT TOP 1 RollNo, SubjectCode FROM #tableB tblB WHERE tblA.RollNo = tblB.RollNo) subQuery;
--========= Student tableIF OBJECT_ID('tempdb..#Student') IS NOT NULLBEGIN DROP TABLE #StudentENDGOCREATE TABLE #Student(StudID VARCHAR(100),RollNo VARCHAR(100))GOINSERT INTO #Student VALUES('Alpha', 'D1234')INSERT INTO #Student VALUES('beta', 'A1122')INSERT INTO #Student VALUES('charlie', 'D1234')INSERT INTO #Student VALUES('bravo', 'C1342')INSERT INTO #Student VALUES('tom', 'B1964')INSERT INTO #Student VALUES('harry', 'A1122')Go--========= StudentSubjects tableIF OBJECT_ID('tempdb..#StudentSubjects') IS NOT NULLBEGIN DROP TABLE #StudentSubjectsENDGOCREATE TABLE #StudentSubjects(RollNo VARCHAR(100),SubjectCode VARCHAR(100),)GO INSERT INTO #StudentSubjects VALUES ('D1234', 1001)INSERT INTO #StudentSubjects VALUES ('A1122', 4001)INSERT INTO #StudentSubjects VALUES ('D1234', 2001)INSERT INTO #StudentSubjects VALUES ('C1342', 5001)INSERT INTO #StudentSubjects VALUES ('B1964', 6001)INSERT INTO #StudentSubjects VALUES ('A1122', 3001)Go--======= Solution:;WITH MyCTE (RollNo, LowestSubjectCode)AS ( SELECT RollNo, MIN (SubjectCode) AS LowestSubjectCode FROM #StudentSubjects GROUP BY RollNo )SELECT S.StudId,S.RollNo,MC.LowestSubjectCodeFROM #Student S INNER JOIN MyCTE MCON S.RollNo = MC.RollNo