I have two tables:
1. #Forecast_Premiums
Syndicate_Key Durg_Key  Currency_Key    Year_Of_Account Forecast_Premium  CUML_EPI_Amount
NULL            NULL      NULL          UNKNOWN              0              6
3                54        46            2000             109105            0
3                54        46            2001             128645           128646
5                47        80            2002             117829           6333
6                47        80            2002             125471           NULL
6                60        80            2003             82371            82371
10               98        215           2006             2093825          77888
10               98        215           2007             11111938         4523645
2.#Forecast_Claims
Syndicate_Key   Durg_Key    Currency_Key    Year_Of_Account Contract_Ref  Forecast_Claims   Ultimate_Profit_Comission
NULL              NULL          NULL           UNKNOWN  UNKNOWN             0                          -45
5                  47            80             2002    AB00ZZ021M12    -9991203                        NULL
5                  47            80             2002    AB00ZZ021M13    -4522                          -74412
9                  60            215            2006    AC04ZZ021M13    -2340299                       -895562
10                 98            46             2007    FAC0ZZ021M55    -2564123                       -851298
The task: Using #Forecast_Premiums and #Forecast_Claims tables write a query to find total amount of Pure Premium ,Cumulative EPI Amount, Forecast_Claims and Ultimate_Profit_Comissionreceived for each combination of Syndicate_Key, Durg_Key , Currency_key and Year_of_Account. Note: In case the Key is NULL set it as 'UNKNOWN' , In Case the Amount is NULL set it as 0.
My solution:
SELECT 
ISNULL(CAST(FP.Syndicate_key AS VARCHAR(20)), 'UNKNOWN') AS 'Syndicate_key', 
ISNULL(CAST(FP.Durg_Key AS VARCHAR(20)), 'UNKNOWN') AS 'Durg_Key',
ISNULL(CAST(FP.Currency_Key AS VARCHAR(20)), 'UNKNOWN') AS 'Currency_Key', 
fp.Year_Of_Account,
SUM(ISNULL(FP.Forecast_Premium,0)) AS 'Pure_Premium',
SUM(ISNULL(FP.CUML_EPI_Amount,0)) AS 'Cuml_Amount',
SUM(ISNULL(dc.Forecast_Claims,0)) AS 'Total_Claims',
SUM(ISNULL(dc.Ultimate_Profit_Comission,0)) AS 'Total_Comission'
FROM #FORECAST_PREMIUMS fp
left join #FORECAST_Claims dc 
ON 
(FP.Year_Of_Account = dc.Year_Of_Account AND
FP.Syndicate_Key = dc.Syndicate_Key AND
FP.Currency_Key = dc.Currency_Key AND
FP.Year_Of_Account = dc.Year_Of_Account)
GROUP BY fp.Syndicate_Key, fp.Durg_Key,fp.Currency_Key,fp.Year_Of_Account
Issue: It returns the Forecast_Claims SUM and Ultimate_Profit_Comission SUM only for one combination of keys and year: 5 47 80 2002.
Moreover it returns 8 rows when it should had return 10.
 
    