Если ваши данные не проиндексированы в запрашиваемом столбце, вам следует использовать решение на основе CASE, рекомендованное Аароном, поскольку строки будут запрашиваться только один раз.
select totalNulls = sum(case when MyField is null then 1 else 0 end),
totalNumbers = sum(case when MyField like '[0-9]' then 1 else 0 end)
from MyTable;
Вы должны знать, что принимаете только, например, «7» в данном случае не «12».
Если вы хотите принять какие-либо номера, вы должны спросить
... when MyField not like '%[^0-9]%' ...
В этом случае вы можете использовать заклинание с помощью числового значения:
select totalNonNumbers = count(*) - sum(isnumeric(MyField)),
totalNumbers = sum(isnumeric(MyField))
from MyTable;
Если столбец проиндексирован, вариант решения Майклса может быть самым быстрым:
select totalNulls = (select count(*) from MyTable where MyField is null),
totalNumbers =
(select count(*) from MyTable where MyField between '0' and '9');
Есть так много способов ...