Fetch a department's total, Its percentage of earnings for that site and its percentage of earnings across the company
Adding the same GROUP BY in the 2nd Select is unneccessary, the data is already unique.

I prefer writing this kind of logic (where you need multiple aggregation levels) as a single Select using Analytical Functions, i.e. Group Sums:

WITH AllSites AS
 (  -- calculate the percentages for all sites
    SELECT DeptName 
        ,DeptNo
        ,SUM(Value) AS SalesValue
        ,SiteNo
    -- Analytical Functions are calculated after GROUP BY/HAVING,
    -- thus you can nest the aggregated Sum in the Group Sum  
        ,SUM(Value) / SUM(SUM(Value)) OVER (PARTITION BY SiteNo) AS SitePercent
        ,SUM(Value) / SUM(SUM(Value)) OVER () AS CompanyPercent
    FROM PLUSalesDetailExtended
    WHERE DATE BETWEEN @SessionDateFrom AND @SessionDateTo
    AND TermNo = 0

    GROUP BY DeptName, DeptNo, SiteNo
 )
-- return only one site
SELECT * FROM AllSites
WHERE SiteNo = @SiteNo


If this is more or less efficient than your current approach depends mainly on he number of sites, at least it's simpler (for me) and easy to extend to multiple/all sites.