Для SQL Server 2008 вы можете сделать
DECLARE @T TABLE
(
pk INT PRIMARY KEY,
c1 INT,
c2 INT,
c3 VARCHAR(10)
)
INSERT INTO @T
SELECT 1,1,1,'foo'
UNION ALL
SELECT 2,1,NULL,'bar'
UNION ALL
SELECT 3,NULL,NULL,NULL
UNION ALL
SELECT 4,NULL,NULL,NULL
SELECT Num AS [Number of Nulls],
COUNT(*) AS [Number of rows]
FROM @T
CROSS APPLY (SELECT COUNT(*) - COUNT(c) FROM (VALUES(cast(c1 as SQL_VARIANT)),
(c2),
(c3)) T (c)) CA(Num)
GROUP BY Num