Using SQL Server, I can order a normal SELECT query using an alias:
SELECT
u.FirstName + \' \' + u.LastName as PhysicianName, COUNT(r.Id)
Column aliases defined in the SELECT can only be used in the ORDER BY on their own. Not in an expression.
You can adjust your original attempt as follows.
;WITH T
AS (SELECT u.FirstName + ' ' + u.LastName AS PhysicianName,
COUNT(r.Id) AS ReferralsCount
FROM Referrals r
INNER JOIN Users u
ON r.PhysicianId = u.Id
GROUP BY r.PhysicianId,
u.FirstName,
u.LastName)
SELECT *
FROM T
ORDER BY CASE
WHEN @orderby = 'PhysicianName' THEN PhysicianName
END,
CASE
WHEN @orderby = 'ReferralsCount' THEN ReferralsCount
END