with
ctein
as
(
(select SUM(A.value) as aval,userid,SUBSTRING(date,1,4) as y from A group by date,userid)
),
cteout
as
(
select SUM(aval) as val,userid,y
from ctein
group by y,userid
)
select cteout.userid,cteout.y,cteout.val
from cteout,B
where cteout.userid=B.userid
and cteout.val=B.value