Try executing like this & compare performance:-CREATE TABLE #Temp(City varchar(20),RegCnt int,NewRegCnt int) INSERT INTO #TempSELECT City, Sum(CASE WHEN fa.RegistrationCt = 0 THEN 1 ELSE 0 END),Sum(CASE WHEN fa.RegistrationCt = 1 THEN 1 ELSE 0 END)FROM [GSK-IMAP].[dbo].[FactActivity] faJOIN dbo.DimBizFinUnit bfu ON bfu.[BFUKey] = fa.[BFUKey]JOIN dbo.DimBrand b ON b.[BrandKey] = fa.[BrandKey]JOIN dbo.DimCampaign c ON c.CampaignKey = fa.CampaignKeyJOIN dbo.DimUser du ON du.UserKey = fa.UserKeyJOIN dbo.DimDate d ON d.DateKey = fa.DateKeyWHERE bfu.BFUKey = @BFUKeyAND b.BrandKey = @BrandKeyAND c.CampaignKey = @CampaignKeyAND d.CalendarDate BETWEEN @StartDate and @EndDateAND (fa.RegistrationCt = 0 OR fa.RegistrationCt =1)GROUP BY CitySELECT SUM(RegCnt) AS 'RegCntAllCities',--analogous to 1st &3rd querySUM(NewRegCnt) AS 'NewRegCntAllCities'FROM #TempSELECT TOP 5 t.City,t.RegCnt AS 'RegCntByCity' --2nd queryFROM #Temp tORDER BY t.RegCnt DESCSELECT t.City,t.NewRegCnt AS NewRegCntByCity --4th queryFROM #Temp tORDER BY t.NewRegCnt DESC