Попробуйте это
SELECT Count(BookedBy = @Scheduler) as [BookedCount],
Count(ConfirmedBy = @Scheduler) as [ConfirmedCount],
Count(CancelledBy = @Scheduler) as [CancelledCount]
FROM tablename
WHERE BookedBy = @Scheduler OR
ConfirmedBy = @Scheduler OR
CancelledBy = @Scheduler
Примечание - не проверено может содержать опечатки
Если вы вводите список, разделенный запятыми, вы можете преобразовать его в таблицу. Смотрите ссылку как это:
http://www.projectdmx.com/tsql/sqlarrays.aspx
Для этого варианта использования я бы порекомендовал одно из решений, которое сохраняет результат в CTE (поскольку вам нужно только один раз преобразовать входные данные, и это будет быстрее)
Тогда вы можете использовать эту таблицу (называемую sTable с именем столбца) следующим образом:
SELECT Count(Bo.Name) as [BookedCount],
Count(Co.Name) as [ConfirmedCount],
Count(Ca.Name) as [CancelledCount]
FROM tablename
LEFT JOIN sTable Bo ON BookedBy = Bo.name
LEFT JOIN sTable Co ON ConfirmedBy = Co.name
LEFT JOIN sTable Ca ON CancelledBy = Ca.name
Полагаю, это сработает, но выглядит не так хорошо, как другие:
SELECT (SELECT COUNT(*) FROM table WHERE BookedBy in (@Scheduler)) AS [BookedCount],
(SELECT COUNT(*) FROM table WHERE ConfirmedBy in (@Scheduler)) as [ConfirmedCount],
(SELECT COUNT(*) FROM table WHERE CancelledBy in (@Scheduler)) as [CancelledCount]