Try one of these:-- based on your median query SELECT T1.ST, (SELECT ((SELECT MAX(H1.NUM) FROM (SELECT TOP 50 PERCENT T2.NUM FROM dbo.t AS T2 WHERE T2.ST = T1.ST ORDER BY T2.NUM ASC) AS H1) + (SELECT MIN(H2.NUM) FROM (SELECT TOP 50 PERCENT T3.NUM FROM dbo.t AS T3 WHERE T3.ST = T1.ST ORDER BY T3.NUM DESC) AS H2)) / CONVERT(DECIMAL(10, 2), 2)) AS Median FROM (SELECT DISTINCT T.ST FROM dbo.t AS T) AS T1;-- another approachSELECT T1.ST, (SELECT SUM(T2.NUM) / CAST(CASE WHEN cnt % 2 = 0 THEN 2 ELSE 1 END AS DECIMAL(10, 2)) FROM (SELECT TOP(CASE WHEN cnt % 2 = 0 THEN 2 ELSE 1 END) T2.NUM FROM (SELECT TOP(cnt / 2 + 1) T2.NUM FROM dbo.t AS T2 WHERE T2.ST = T1.ST ORDER BY T2.NUM) AS T2 ORDER BY T2.NUM DESC) AS T2) AS Median FROM (SELECT T.ST, COUNT(T.NUM) AS cnt FROM dbo.t AS T GROUP BY T.ST) AS T1