What you're getting is a Cartesian product. You can see the effects of this by removing the grouping and looking through the data.
For example; if your green table contained 2 rows and your blue table contained 4, your join would return a total of 8 records.
To resolve the problem, well, you're nearly there. You've got all the right pieces, just not put them together quite right.
Assuming the following query returns the correct results for green:
SELECT CategoryID
, Sum(GreenValue) As GreenTotal
FROM Green
GROUP
BY CategoryID
The results for blue can be retrieved by following the same method:
SELECT CategoryID
, Sum(BueValue) As BlueTotal
FROM Blue
GROUP
BY CategoryID
Now that we have two distinct results that are correct, we should join these results to our category table:
SELECT Category.CategoryName
, GreenSummary.GreenTotal
, BlueSummary.BlueTotal
FROM Category
LEFT
JOIN (
SELECT CategoryID
, Sum(GreenValue) As GreenTotal
FROM Green
GROUP
BY CategoryID
) As GreenSummary
ON GreenSummary.CategoryID = Category.CategoryID
LEFT
JOIN (
SELECT CategoryID
, Sum(BlueValue) As BlueTotal
FROM Blue
GROUP
BY CategoryID
) As BlueSummary
ON BlueSummary.CategoryID = Category.CategoryID