I worked on this for awhile and this was the best I could come up with...
-- SAMPLE DATA
IF OBJECT_ID('tempdb..#Weekday') IS NOT NULL DROP TABLE #Weekday; CREATE TABLE #Weekday(Weekday_id int identity primary key, [day] nvarchar(50));
IF OBJECT_ID('tempdb..#SubjectToStudy') IS NOT NULL DROP TABLE #SubjectToStudy; CREATE TABLE #SubjectToStudy(Weekday_id int,[Subject] nvarchar(50));
IF OBJECT_ID('tempdb..#output') IS NOT NULL DROP TABLE #output; CREATE TABLE #output(Weekday_id int, [day] nvarchar(50), classes nvarchar(255));
INSERT INTO #Weekday VALUES(N'MONDAY'),(N'TUESDAY'),(N'WEDNESDAY');
INSERT INTO #SubjectToStudy VALUES(1,N'PHYSICS'),(1,N'CHEMISTRY'),(1,N'MATHEMATICS'),(2,N'COMPUTERSCIENCE'),(2,N'BIOLOGY'),(3,N'BOTANY'),(3,N'PHYSICS')
INSERT INTO #output
SELECT w.Weekday_id, [day], s.[Subject]
FROM #Weekday w
JOIN #SubjectToStudy s ON w.Weekday_id=s.Weekday_id
ORDER BY Weekday_id
--THE ROUTINE:
DECLARE @classlist nvarchar(300)='';
UPDATE #output
SET @classlist=classes=(CASE WHEN @classlist='' THEN [day]+' ' ELSE @classlist+' ' END)+classes
FROM #output
WHERE Weekday_id=1
SET @classlist='';
UPDATE #output
SET @classlist=classes=(CASE WHEN @classlist='' THEN [day]+' ' ELSE @classlist+' ' END)+classes
FROM #output
WHERE Weekday_id=2
SET @classlist='';
UPDATE #output
SET @classlist=classes=(CASE WHEN @classlist='' THEN [day]+' ' ELSE @classlist+' ' END)+classes
FROM #output
WHERE Weekday_id=3;
;WITH answer AS
(SELECT m=DENSE_RANK() OVER (PARTITION BY Weekday_id ORDER BY LEN(classes) DESC),
classes
FROM #output)
SELECT classes FROM answer
WHERE m=1;
--CLEANUP
DROP TABLE #Weekday;
DROP TABLE #SubjectToStudy;
DROP TABLE #output
GO
Nice work k125
-- Itzik Ben-Gan 2001