It would be much easier if that was a child-table instead - and you could add a new store without having to modify your database.
Also a bit bothered that you have having to CAST it - what is the datatype of the [302] column?
Also using NUMERIC with no Precision or Scale uses the defaults. Personally I'd prefer to see those explicitly stated, although I doubt you have Qty big enough to need to increase the Precision default ...
I don't know if it is the answer to your question, but you could just "wrap" your query with
SELECT SUM(X.total) AS [GrandTotal]
FROM
(
... your query here ...
) AS X
If your problem is "reusing" the SUM from your sub-query MULTIPLE times in the outer SELECT then I normally do that like this:
SELECT Col1, Col2, [302_Total], [302_Total] * Price AS Total
FROM MyMainTable AS M
CROSS APPLY
(
SELECT SUM(SomeCol) AS [302_Total]
FROM MyChildTable AS C
WHERE C.SomeID = M.SomeID
) AS X
or you could use a CTE
If you want both the detail from your query AND a total (e.g. at the bottom of the report) one way is to output the results from your query to a temporary table, so:
SELECT Col1, Col2, ...
INTO #MyTempTable
FROM ...
and then output like this:
SELECT Col1, Col2, ..., total
FROM #MyTempTable
UNION ALL
SELECT 'Total', NULL, ..., SUM(total)
FROM #MyTempTable
you could probably also do that with a ROLLUP