Этот запрос выполняется по таблице только один раз и выдает все три значения.
select
sum(case when state = 's1' then 1 end) as c1,
sum(case when state = 's2' then 1 end) as c2,
sum(case when state = 's3' then 1 end) as c3
from NameOfTable
Однако, почему вы хотите пройти через стол только один раз? Скорость, потребление ресурсов, ввод-вывод? Ваше ограничение кажется довольно искусственным.
Альтернативное решение, данное @Loc, выполняет три запроса и может быть быстрее, чем этот (полное сканирование таблицы), если таблица имеет индексы.