你可以嘗試這樣的事情來實現它:
-- Create demo data
CREATE TABLE #temp(SrNo int, Class nvarchar(5), Name nvarchar(50), Marks int)
INSERT INTO #temp(SrNo, Class, Name, Marks)
VALUES (1,'1A','Student1',67),
(2,'1A','Student2',62),
(3,'1A','Student3',65),
(4,'1A','Student4',78),
(5,'1A','Student5',28),
(6,'1B','Student6',57),
(7,'1B','Student7',65),
(8,'1B','Student8',85),
(9,'1B','Student9',18),
(10,'1B','Student10',8)
-- your part
SELECT t.*
FROM (
SELECT Class,
MIN(Marks) as min_marks,
AVG(Marks) as avg_marks,
MAX(Marks) as max_marks
FROM #temp
GROUP BY class
) as data
OUTER APPLY (
SELECT TOP 1 t.marks as nearest_avg
FROM #temp as t
WHERE t.class = data.Class
ORDER BY CASE WHEN data.avg_marks-marks >= 0 THEN data.avg_marks-Marks ELSE Marks-data.avg_marks END
) as avg_data
INNER JOIN #temp as t
ON t.Class = data.Class
AND(
t.Marks = data.min_marks
OR t.marks = avg_data.nearest_avg
OR t.marks = data.max_marks
)
-- Cleanup
DROP TABLE #temp
什麼是你的DBMS?我們可以選擇嗎? –
@Sebastien sql 2008 r2 – user3625024
我認爲平均分不應該與任何記錄相關,因爲您已經在結果中指定了srno。 –