Seems like you're working on the same problem as this other user:
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS with multiple queries[
^]
You both have badly-structured data, and you both have terrible choice in table names.
The hacky workaround is virtually the same:
WITH cte As
(
SELECT id, name FROM tbl1
UNION SELECT id, name FROM tbl2
)
SELECT
N.id,
N.name,
(
SELECT Sum(SpentAmt)
FROM tbl1 As S
WHERE S.id = N.id And S.name = N.name
And S.createdon >= '2021-04-01'
) As SpentAmt,
(
SELECT Sum(SpentAmt)
FROM tbl2 As S
WHERE S.id = N.id And S.name = N.name
And S.createdon >= '2021-04-01'
) As UsedAmt
FROM
cte As N
;