Can't test this on SQL Server 2005, but common table expression should simplify things somewhat;
WITH cte AS (
SELECT(b.receipts_total*1.0 - a.receipts_total*1.0) / (a.receipts_total*1.0) * 100 perc
FROM qr_dom a JOIN qr_dom b ON a.id = b.id AND a.yr = 2012 AND b.yr = 2013
)
SELECT
2013 AS year,
SUM(CASE WHEN perc > 1 THEN 1 ELSE 0 END) positive,
SUM(CASE WHEN perc < -1 THEN 1 ELSE 0 END) negative,
SUM(CASE WHEN perc <= 1 AND perc >= -1 THEN 1 ELSE 0 END) flat
FROM cte
If you really need the results in separate rows, you could rewrite the query to use UNION ALL
between 3 separate queries against the table expression.