Trying to avoid a double full scan with aggregates in query
No, I cannot see a better way. The group-by constraints are different for the selects, so there is no way to merge them in to one.

The remainder of your code looks good, except I am concerned about your % calculations.... are they accurate?


(vary.Variance_Count / COUNT(tot.item_num) * 100) AS DECIMAL(10,2)



That looks like it will be integer arithmetic all the way through, I would instead write it as:

(100.0 * vary.Variance_Count / COUNT(tot.item_num)) AS DECIMAL(10,2)