あなたの質問を正しく理解できたと思います:-)
利用可能な月と年 (少なくとも 1 つのアカウントにデータが存在する場合) ごとに、各アカウントの合計を表示します (そのうちの 1 つが 0 であっても)。これを行うために、2 つのクエリを結合し、ISNULL 関数を使用して正しいソースからデータを取得しました。
ダミーデータを使用した私のソリューションは次のとおりです。
--Preparing Dummy Data
;WITH spending
AS (SELECT '01-01-2010' spDate,
100 spamount,
'Bank1' spaccount
UNION
SELECT '01-01-2010' spDate,
200 spamount,
'Bank1' spaccount
UNION
SELECT '03-01-2010' spDate,
150 spamount,
'Bank1' spaccount
UNION
SELECT '04-01-2010' spDate,
500 spamount,
'Bank1' spaccount
UNION
SELECT '01-01-2010' spDate,
200 spamount,
'Bank1' spaccount
UNION
SELECT '03-01-2010' spDate,
10 spamount,
'Bank2' spaccount
UNION
SELECT '05-01-2010' spDate,
800 spamount,
'Bank2' spaccount
UNION
SELECT '03-01-2010' spDate,
110 spamount,
'Bank2' spaccount
UNION
SELECT '01-01-2010' spDate,
100 spamount,
'Bank2' spaccount)
--End of Dummy Data
--Start Query on Dummy Data
SELECT ISNULL(Bank1.SPMONTH, Bank2.SPMONTH) AS spMonth,
ISNULL(Bank1.SPYEAR, Bank2.SPYEAR) AS spYear,
ISNULL(Bank1.TOTALAMOUNT, 0) AS TotalAmount_Bank1,
ISNULL(Bank2.TOTALAMOUNT, 0) AS TotalAmount_Bank2
FROM (SELECT YEAR(SPDATE) AS spYear,
MONTH(SPDATE) AS spMonth,
SUM(SPAMOUNT) AS TotalAmount
FROM spending
WHERE SPACCOUNT LIKE 'Bank1'
GROUP BY YEAR(SPDATE),
MONTH(SPDATE)) AS Bank1
FULL JOIN (SELECT YEAR(SPDATE) AS spYear,
MONTH(SPDATE) AS spMonth,
SUM(SPAMOUNT) AS TotalAmount
FROM spending
WHERE SPACCOUNT LIKE 'Bank2'
GROUP BY YEAR(SPDATE),
MONTH(SPDATE)) AS Bank2
ON Bank1.SPMONTH = Bank2.SPMONTH
AND Bank2.SPYEAR = Bank2.SPYEAR
ORDER BY SPYEAR,
SPMONTH