GROUP BY avec CASE – tsql

J'ai un select qui ressemble à ceci:

SELECT ReportingDate , PortfolioID , PortfolioNme , CASE WHEN @ReportType = 'GeoCountry' THEN Infoportal.dbo.fn_Generic_ProperCase(Country) WHEN @ReportType = 'GeoEquity' THEN Region END AS Country , RANK() OVER (PARTITION BY PortfolioID ORDER BY SUM(Percentage) DESC, CASE WHEN @ReportType = 'GeoCountry' THEN Country WHEN @ReportType = 'GeoEquity' THEN Region END) AS [Rank] , SUM(Percentage) AS [Weight] FROM @Worktable as WT WHERE WT.IssueType1 <> '010' AND WT.IssueType2 <> '055' GROUP BY WT.ReportingDate , WT.PortfolioID , WT.PortfolioNme , CASE WHEN @ReportType = 'GeoCountry' THEN WT.Country WHEN @ReportType = 'GeoEquity' THEN WT.Region END 

Ce que j'essaie de faire est de grouper par pays ou par région en fonction du @ReportType et d'afficher la sum du pourcentage et du rang.

Cependant, je continue d'get l'erreur:

Msg 8120, niveau 16, état 1, ligne 349
La colonne '@ Worktable.Country' n'est pas valide dans la list de sélection car elle n'est contenue ni dans une fonction d'agrégat ni dans la clause GROUP BY.
Msg 8120, niveau 16, état 1, ligne 350
La colonne '@ Worktable.Region' n'est pas valide dans la list de sélection car elle n'est contenue ni dans une fonction d'agrégat ni dans la clause GROUP BY.

C'est tellement facile et ça m'ennuie vraiment. De l'aide serait grandement appréciée.

Merci

Je crois qu'un CTE simplifierait ce que vous essayez de faire:

 ;WITH WT AS ( SELECT ReportingDate , PortfolioID , PortfolioNme , CASE WHEN @ReportType = 'GeoCountry' THEN Infoportal.dbo.fn_Generic_ProperCase(Country) WHEN @ReportType = 'GeoEquity' THEN Region END AS Country , Percentage FROM @Worktable WHERE IssueType1 <> '010' AND IssueType2 <> '055' ) SELECT ReportingDate , PortfolioID , PortfolioNme , Country , RANK() OVER ( PARTITION BY PortfolioID ORDER BY SUM(Percentage) DESC, Country) AS [Rank] , SUM(Percentage) AS [Weight] FROM WT GROUP BY ReportingDate , PortfolioID , PortfolioNme , Country 
 select ReportingDate, PortfolioID, PortfolioNme, Country, RANK() OVER (PARTITION BY PortfolioID ORDER BY SUM(Percentage) DESC, CountryOrRegion) AS [Rank], SUM(Percentage) AS [Weight] from ( SELECT ReportingDate , PortfolioID , PortfolioNme , CASE WHEN @ReportType = 'GeoCountry' THEN Country WHEN @ReportType = 'GeoEquity' THEN Region END as CountryOrRegion , CASE WHEN @ReportType = 'GeoCountry' THEN Infoportal.dbo.fn_Generic_ProperCase(Country) WHEN @ReportType = 'GeoEquity' THEN Region END AS Country FROM @Worktable as WT WHERE WT.IssueType1 <> '010' AND WT.IssueType2 <> '055' ) t GROUP BY WT.ReportingDate , WT.PortfolioID , WT.PortfolioNme , CountryOrRegion