Я бы использовал APPLY
:
SELECT tt.colname, COUNT(*)
FROM table t CROSS APPLY
( VALUES ('Column1'), ('Column2'), ('Column3'), . .
) tt (colname)
GROUP BY tt.colname;
Если вы хотите считать только ненулевые значения, включите также значение столбца:
SELECT tt.colname, COUNT(tt.colval)
FROM table t CROSS APPLY
( VALUES ('Column1', Column1),
('Column2', Column2),
('Column3', Column3),
. . .
) tt (colname, colval)
GROUP BY tt.colname;